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

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

我怎样才能做到这一点?我在这里做错了什么?

问候,卡蒂克。

4

2 回答 2

2

在索引对象时删除,.即更改

myObject.[activity.ActivityName] = activityMinutes;

myObject[activity.ActivityName] = activity.Minutes;

实际上,这不会立即解决您的问题,它会很好地编译,但是当您尝试运行它时会抛出 a RuntimeBinderException,因为您无法ExpandoObject直接索引到 a 。您需要在迭代之前将其转换为字典(实际上就是这样),例如

var dict = (IDictionary<string, object>)myObject;
...
dict[activity.ActivityName] = activity.Minutes;
于 2013-05-14T13:27:12.467 回答
1

我怀疑您需要将该ExpandoObject部分视为字典:

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

ExpandoObject当您在编译时知道属性名称时,这就是将属性分配给的方式。

于 2013-05-14T13:26:03.410 回答