2013-05-14 94 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;