2009-07-30 17 views
5

In TagBuilder e le altre classi posso scrivere qualcosa di simile:Come inizializzare IDictionary nel costruttore?

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

ma non so come passare il parametro IDictionary.

Come posso fare quello al volo? Senza creare una variabile Dictionary.

TagBuilder è un esempio, ci sono altre classi che accettano anche un parametro IDictionary. La domanda riguarda il caso generico.

risposta

5

Il seguente post del blog ha un metodo di supporto che può creare oggetti dizionario da tipi anonimi.

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, non vedo come funziona in un inizializzatore di oggetto. –

+0

Non funziona con TagBuilder perché, come correttamente sottolineato, il setter è privato. –

0

Se si fa riferimento alla proprietà Attributes, il setter è privato, quindi non è possibile impostarlo in un inizializzatore dell'oggetto.

Dopo aver inizializzato il TagBuilder, dovresti essere in grado di aggiungere singoli attributi con tr.Attributes.Add(key,value).

37

Un altro modo di creare dizionari da tipi anonimi:

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

Problemi correlati