首页 新闻 会员 周边 捐助

如何对dynamic中的一个属性进行修改

0
悬赏园豆:10 [已解决问题] 解决于 2023-02-06 20:57

dynamic item = new { code = "111", name = "大熊" };

如上直接定义了,不遍历的情况下怎么去修改name属性值

菜菜灰的主页 菜菜灰 | 初学一级 | 园豆:88
提问于:2023-02-06 18:02
< >
分享
最佳答案
0

这个是 anonymous object,无法实现。

如果能换成 ExpandoObject,就不费吹灰之力

using System.Dynamic;
dynamic item = new ExpandoObject();
item.code = "111";
item.name = "大熊";
item.name = "小熊";
Console.WriteLine(item.name);
收获园豆:10
dudu | 高人七级 |园豆:30206 | 2023-02-06 18:21

dynamic item = new { code = "111", name = "大熊" };

有方法能将上面的直接转成ExpandoObject吗

菜菜灰 | 园豆:88 (初学一级) | 2023-02-06 20:41

@菜菜灰: 要用反射

dudu | 园豆:30206 (高人七级) | 2023-02-06 20:47

顺便问一下,new ExpandoObject() 有集合初始化器方法吗

菜菜灰 | 园豆:88 (初学一级) | 2023-02-06 21:06

@菜菜灰: 需要借助 Dictionary,参考 https://stackoverflow.com/a/43411810/5989202 的实现代码

using System.Dynamic;

IDictionary<string, object> dict = new Dictionary<string, object>()
{
    { "code", "111"},
    { "name", "大熊"},
};

dynamic item = dict.Aggregate(
    new ExpandoObject() as IDictionary<string, object>, 
    (a, p) => { a.Add(p); return a; });

Console.WriteLine(item.name);
item.name = "小熊";
Console.WriteLine(item.code);
Console.WriteLine(item.name);
dudu | 园豆:30206 (高人七级) | 2023-02-06 21:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册