【问题标题】:how to add dynamic array of item in ExpandoObject Xamarin.forms如何在 ExpandoObject Xamarin.forms 中添加项目的动态数组
【发布时间】:2019-08-20 02:24:22
【问题描述】:

我想在 ExpandoObject 中添加动态选择的项目,然后以 json 值的形式打印出来。如果我选择了 2 个值,它只会打印最后一个值 2 次。我的问题是我选择它只打印最后一个值。

我的代码: 声明

 dynamic output = new List<dynamic>();
 dynamic foo = new ExpandoObject();
 List<int> selected = new List<int>();

切换切换功能:

 private void Switch_Toggled(object sender, ToggledEventArgs e)
    {
        var switch1 = (Switch)sender;
        var human = (Human)switch1.BindingContext;
        var id = human.retail_modified_item_id;
        var name = human.name;
        var old_price = human.old_price;
        var new_price = human.new_price;
        if (switch1.IsToggled)
        {
            if (!selected.Contains(id))
            {
                selected.Add(id);
                foo.id = id;
                foo.name = name;
                foo.old_price=old_price;
                foo.new_price=new_price;
                output.Add(foo);                 
            }
        }
        else
        {
            if (selected.Contains(id)) selected.Remove(id);
        }
    }

打印Json值;

 string json = Newtonsoft.Json.JsonConvert.SerializeObject(output);
 Debug.WriteLine(json);

我的输出是:

[{"id":1000739,"name":"Hashbrowns","old_price":0.99,"new_price":8.5},{"id":1000739,"name":"Hashbrowns","old_price" :0.99,"new_price":8.5}]

如果我选择了 2 个值,它只会打印最后一个值 2 次。

【问题讨论】:

  • 内容描述得很好但忘了问问题,你的问题是什么?
  • 我在最后一行添加了它。好的,我更新了它
  • 可能是因为您正在使用 selected.Remove(id) 但不是同时从 output 中删除该项目,因此从 selected 中删除了值,但在 output 中仍然存在相同的值并添加了又一样
  • 但我没有删除任何东西..如果显示相同的 id 那么只有我删除了
  • 现在可以用了吗?

标签: c# json xamarin.forms uiswitch expandoobject


【解决方案1】:

动态 foo = new ExpandoObject();

你在这里声明了全局变量,所以第二次调用下面的代码时,你重新假设了第一个 foo 并再次添加它,所以输出列表中有两个相同的项目。

foo.id = id;
foo.name = name;
foo.old_price=old_price;
foo.new_price=new_price;
output.Add(foo);

你可以这样改变:

if (!selected.Contains(id))
    {
        selected.Add(id);
        dynamic foo = new ExpandoObject(); // local variables
        foo.id = id;
        foo.name = name;
        foo.old_price=old_price;
        foo.new_price=new_price;
        output.Add(foo);                 
    }

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2011-06-23
    • 2011-07-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多