2013-05-14 2 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 루프 내부에, 나는 모든 활동에 대한 속성을 생성해야, 아래의 코드를 찾아주세요. 예를 들어 members.ActivityList에 4 개의 활동이있는 경우 object에 대해 4 개의 속성을 생성해야합니다.

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

어떻게하면됩니까? 내가 여기서 뭘 잘못 했니?

감사합니다. Karthik.

답변

1

나는 당신이 그 부분에 대한 사전으로 ExpandoObject을 치료하는 데 필요 의심 : 당신이 컴파일 타임에 속성 이름을하지 할 알고 ExpandoObject에 속성을 할당하는 방법이다

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

. 당신이 바로 문제가 해결되지 않습니다

myObject.[activity.ActivityName] = activityMinutes; 

사실

myObject[activity.ActivityName] = activity.Minutes; 

에 객체, 즉 변화를 색인 할 때

2

. 제거가 잘 컴파일하지만 때 실행하려고하면 ExpandoObject에 직접 색인을 생성 할 수 없으므로 RuntimeBinderException을 던집니다. 반복하기 전에 사전으로 캐스팅해야합니다.

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