2009-07-30 2 views
5

TagBuilder 및 다른 클래스에서 나는 다음과 같은 것을 쓸 수있다 :생성자에서 IDictionary를 초기화하는 방법?

var tr = new TagBuilder("HeaderStyle"){InnerHtml = html, [IDictionary Attributes]} 

그러나 IDictionary 매개 변수를 전달하는 방법을 모른다.

비행에서 어떻게 을 할 수 있습니까? 사전 변수를 만들지 않고.

TagBuilder를 예로 들자면 IDictionary 매개 변수도 허용하는 다른 클래스가 있습니다. 문제는 일반적인 경우에 관한 것입니다.

답변

5

다음 블로그 게시물에는 익명 형식으로 사전 개체를 만들 수있는 도우미 메서드가 있습니다.

http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

void CreateADictionaryFromAnonymousType() 
    { 
     var dictionary = MakeDictionary(new {Name="Roy",Country="Israel"}); 
     Console.WriteLine(dictionary["Name"]); 
    } 

private IDictionary MakeDictionary(object withProperties) 
    { 
     IDictionary dic = new Dictionary<string, object>(); 
     var properties = 
      System.ComponentModel.TypeDescriptor.GetProperties(withProperties); 
     foreach (PropertyDescriptor property in properties) 
     { 
      dic.Add(property.Name,property.GetValue(withProperties)); 
     } 
     return dic; 
    } 
+0

로버트, 내가 볼 수 없습니다. –

+0

TagBuilder에 대해서는 올바르게 작동하지 않으므로 세터는 비공개입니다. –

0

Attributes 속성을 참조하는 경우 setter는 private이므로 개체 이니셜 라이저에서 설정할 수 없습니다.

TagBuilder를 초기화 한 후에 tr.Attributes.Add(key,value)과 함께 개별 속성을 추가 할 수 있어야합니다.

37

또 다른 방법은 익명의 유형에서 사전을 만들 수 있습니다 : 개체 이니셜 라이저에서 작동하는 방법

new Dictionary<int, StudentName>() 
{ 
    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}}, 
    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}}, 
    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}} 
}; 

http://msdn.microsoft.com/en-us/library/bb531208.aspx

관련 문제