我已经创建了一个动态对象,并在运行时使用ExpandoObject为其设置属性和值。
dynamic parentDynamic = new ExpandoObject();
var parentName = "GroupOne";
((IDictionary<String, Object>)parentDynamic)[parentName] = "default";
Console.WriteLine(parentDynamic.GroupOne);
控制台将按预期成功输出“默认”。
我还以相同的方式创建了具有多个属性的子对象
dynamic childDynamic = new ExpandoObject();
var childProperty1 = "FirstName";
var childProperty2 = "LastName";
var childProperty3 = "Occupation";
((IDictionary<String, Object>)childDynamic)[childProperty1] = "John";
((IDictionary<String, Object>)childDynamic)[childProperty2] = "Smith";
((IDictionary<String, Object>)childDynamic)[childProperty3] = "Plumber";
Console.WriteLine(childDynamic.Occupation);
控制台成功按预期输出“管道工”。
当我尝试将childDynamic对象添加到parentDynamic对象并在运行时给它命名时,就会遇到麻烦。这是我最近的失败尝试:
var childName = "ChildOne";
((IDictionary<String, Object>)((IDictionary<String, Object>)parentDynamic)[parentName])[childName] = childDynamic;
Console.Write(parentDynamic.GroupOne.ChildOne.Occupation);
我在尝试分配时遇到的错误是:无法将类型为“ System.String”的对象转换为类型为“ System.Collections.Generic.IDictionary`2 [System.String,System.Object]”。
本质上,我希望能够访问parentDynamic.GroupOne.ChildOne.Occupation并返回“ Plumber”或parentDynamic.GroupOne.ChildOne.FirstName并返回“ John”
本来我想像这样一次完成所有作业
parentDynamic["GroupOne"]["ChildOne"]["Occupation"] = "Plumber"
但是我收到错误消息:无法将[]的索引应用于类型为'System.Dynamic.ExpandoObject'的表达式,这就是为什么我沿着创建父对象和子对象并将其首先转换为Dictionary对象的原因走的原因。理想情况下,我想像上面那样做,因为它更简单。
为了能够使用parentDynamic.GroupOne.ChildOne
语法,GroupOne
属性(ExpandoObject
在您的情况下为)也应该是动态的string
。
像这样的东西:
dynamic parentDynamic = new ExpandoObject();
parentDynamic.GroupOne = new ExpandoObject();
parentDynamic.GroupOne.ChildOne = new ExpandoObject();
parentDynamic.GroupOne.ChildOne.FirstName = "John";
parentDynamic.GroupOne.ChildOne.LastName = "Smith";
parentDynamic.GroupOne.ChildOne.Occupation = "Plumber";
或搭配IDictionary<string, object>
演员:
IDictionary<string, object> parent = new ExpandoObject();
IDictionary<string, object> group = new ExpandoObject();
IDictionary<string, object> child = new ExpandoObject();
child["FirstName"] = "John";
child["LastName"] = "Smith";
child["Occupation"] = "Plumber";
parent["GroupOne"] = group;
group["ChildOne"] = child;
dynamic parentDynamic = parent;
Console.WriteLine(parentDynamic.GroupOne.ChildOne.Occupation);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句