2011-03-15 6 views
6

일반적으로, 우리는 다음과 같은 속성을 만들 수 있습니다 내 경우 ExpandoObject를 사용하여 런타임 속성을 만들 수 있습니까?

dynamic expando = new ExpandoObject(); 
expando.Price = 45k; 
expando.Value = "Good"; 

, 나는 그런 "가격"또는 실행 때까지 "값"등의 속성을 알 수 없습니다. 어떻게 그런 동적 속성을 만들 수 있습니까? 뭔가 같은,

dynamic expando = new ExpandoObject(); 
expando[properties[0]] = 45k; 
expando[properties[1]] = "Good"; 
expando[properties[2]] = "Red"; 
expando[properties[3]] = 8; 

어쨌든 이런 종류의 동작을 달성하기 위해.

+0

[ExpandoObject에 알 수없는 (디자인 타임에) 속성 추가] 중복 가능 (http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – stijn

답변

20

그냥이 IDictionary<string, Object> 구현한다는 사실을 사용하면 실행 시간까지의 속성을 모르는 경우, 다른 한편으로

IDictionary<string, Object> expando = new ExpandoObject(); 
expando[properties[0]] = 45; 
expando[properties[1]] = "Good"; 
expando[properties[2]] = "Red"; 
expando[properties[3]] = 8; 

dynamic d = expando; 
// Now use the properties as normal 

를, 무엇을 실제로 소비거야? 그것은 일 수 있습니다.은 여전히 ​​ExpandoObject을 사용하는 것이 합리적입니다. 그러나 똑같이 일 수 있습니다. 시작하려면 Dictionary<string, object>을 사용하는 것이 합리적입니다.

+0

제안 해 주셔서 감사합니다. AdomdDataReader 개체가 있습니다. Grid 컨트롤은 AdomdData 객체를 ItemsSource로 바인딩 할 수 없기 때문에 ADR에서 더 가벼운 열거 형 소스를 생성하려고합니다. 이를 위해 대부분의 그리드 컨트롤이 동적 바인딩을 지원하므로 동적 인 부분을 살펴 보았습니다. 다시 한번 감사드립니다. –

+0

+1, 특히이 경우 ExpandoObject를 사용하는 것이 어리석은 일일 수 있음을 지적하십시오. 현재 대신 일반 사전을 사용하도록 내 코드를 리팩터링합니다. :) –

관련 문제