2013-05-14 93 views
0

我在创建动态对象时遇到了问题。请找到下面的代码,创建对象的动态属性

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循环,我需要为所有活动生成属性。例如,如果member.ActivityList中有4个活动,则需要为对象生成4个属性。

myObject.Activity1 = 10; 
myObject.Activity2 = 20; 
myObject.Activity3 = 30; 
myObject.Activity4 = 40; 

我该怎么做?我在这里做错了什么?

Regards, Karthik。

回答

1

我怀疑你需要治疗ExpandoObject作为字典的那部分:

IDictionary<string, object> dictionary = myObject; 
foreach (var activity in members.ActivityList) 
{ 
    dictionary[activity.ActivityName] = activity.Minutes; 
} 

这是一个ExpandoObject指定属性的方式,当你在编译时不知道属性名称。

2

取出.当你索引对象即改变

myObject.[activity.ActivityName] = activityMinutes; 

myObject[activity.ActivityName] = activity.Minutes; 

其实这不会解决你的问题,立竿见影,它将编译正常,但当你试图运行它会抛出RuntimeBinderException,因为你不能直接索引到ExpandoObject。您需要在迭代之前将其转换为字典(实际上就是这样),例如

var dict = (IDictionary<string, object>)myObject; 
... 
dict[activity.ActivityName] = activity.Minutes;