如何在构造函数中初始化IDictionary?

时间:2009-07-30 00:01:55

标签: c# asp.net-mvc

在TagBuilder和其他类中,我可以编写如下内容:

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

但我不知道如何传递IDictionary参数。

我如何动态动手?无需创建Dictionary变量。

TagBuilder就是一个例子,还有其他类也接受参数IDictionary。问题是关于通用案例。

3 个答案:

答案 0 :(得分:38)

从匿名类型创建词典的另一种方法:

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

答案 1 :(得分:6)

以下博文中有一个帮助方法,可以从匿名类型创建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; 
   }

答案 2 :(得分:0)

如果您指的是Attributes属性,则setter是私有的,因此您无法在对象初始值设定项中设置它。

在初始化TagBuilder后,您应该可以使用tr.Attributes.Add(key,value)添加单个属性。