Как инициализировать IDictionary в конструкторе? - PullRequest
6 голосов
/ 30 июля 2009

В TagBuilder и других классах я могу написать что-то вроде:

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

но я не знаю, как передать параметр IDictionary.

Как я могу это сделать на лету ? Без создания словарной переменной.

TagBuilder является примером, есть и другие классы, которые также принимают параметр IDictionary. Вопрос о родовом падеже.

Ответы [ 3 ]

38 голосов
/ 30 июля 2009

Еще один способ создания словарей из анонимных типов:

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

6 голосов
/ 30 июля 2009

В следующем сообщении блога есть вспомогательный метод, который может создавать объекты Dictionary из анонимных типов.

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 голосов
/ 30 июля 2009

Если вы ссылаетесь на свойство Attributes, установщик является частным, поэтому вы не можете установить его в инициализаторе объекта.

После инициализации TagBuilder вы сможете добавлять отдельные атрибуты с помощью tr.Attributes.Add(key,value).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...