2009-07-30 10 views
5

En TagBuilder y otras clases que puedo escribir algo como:¿Cómo inicializar IDictionary en constructor?

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

pero no sé cómo pasar el parámetro IDictionary.

¿Cómo puedo hacer eso sobre la marcha? Sin crear una variable de diccionario.

TagBuilder es un ejemplo, existen otras clases que aceptan un parámetro IDictionary también. La pregunta es sobre el caso genérico.

Respuesta

5

La siguiente entrada del blog tiene un método de ayuda que pueden crear objetos de diccionario de tipos anónimos.

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

Robert, no veo la forma en que funciona en un inicializador de objeto. –

+0

No funciona para TagBuilder porque, como usted señala correctamente, el colocador es privada. –

0

Si se refiere a la propiedad Attributes, el colocador es privada, por lo que no se puede establecer en un inicializador de objeto.

Después de haber inicializado el TagBuilder, usted debe ser capaz de añadir atributos individuales con tr.Attributes.Add(key,value).

37

Otra forma de crear Diccionarios de tipos anónimos:

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

Cuestiones relacionadas