2009-07-30 10 views
5

TagBuilderと他のクラスでは、次のような記述ができます。コンストラクタでIDictionaryを初期化するには?

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

IDictionaryパラメータを渡す方法がわかりません。

飛行機でをどうすればいいですか? Dictionary変数を作成しないでください。

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プロパティを参照している場合、セッターはプライベートなので、オブジェクト初期化子で設定することはできません。

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

関連する問題