为对象创建动态属性

时间:2013-05-14 13:24:30

标签: c# dynamic-properties

我在创建动态对象时遇到问题。请找到以下代码,

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。

2 个答案:

答案 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分配属性的方法。