我在创建动态对象时遇到问题。请找到以下代码,
List<object> membersList = new List<object>();
foreach(var members in activityMembers){
dynamic myObject = new System.Dynamic.ExpandoObject();
myObject.MemberNumber = members.MemberNumber;
myObject.MemberName = members.Name;
foreach (var activity in members.ActivityList)
{
myObject.[activity.ActivityName] = activity.Minutes;
}
membersList.Add(myObject);
}
在第二个foreach循环中,我需要为所有活动生成属性。例如,如果members.ActivityList中有4个活动,则需要为object生成4个属性。
myObject.Activity1 = 10;
myObject.Activity2 = 20;
myObject.Activity3 = 30;
myObject.Activity4 = 40;
我该怎么做?我在这里做错了什么?
此致 KARTHIK。
答案 0 :(得分:2)
在索引对象时删除.
,即更改
myObject.[activity.ActivityName] = activityMinutes;
到
myObject[activity.ActivityName] = activity.Minutes;
实际上这不能立即解决你的问题,它会编译正常但是当你试图运行它会抛出一个RuntimeBinderException
,因为你不能直接索引到ExpandoObject
。您需要在迭代之前将其强制转换为字典(这实际上是它),例如。
var dict = (IDictionary<string, object>)myObject;
...
dict[activity.ActivityName] = activity.Minutes;
答案 1 :(得分:1)
我怀疑你需要将ExpandoObject
视为该部分的字典:
IDictionary<string, object> dictionary = myObject;
foreach (var activity in members.ActivityList)
{
dictionary[activity.ActivityName] = activity.Minutes;
}
当在编译时不知道属性名称时,这就是为ExpandoObject
分配属性的方法。