在TagBuilder和其他类中,我可以编写如下内容:
var tr = new TagBuilder("HeaderStyle"){InnerHtml = html, [IDictionary Attributes]}
但我不知道如何传递IDictionary参数。
我如何动态动手?无需创建Dictionary变量。
TagBuilder就是一个例子,还有其他类也接受参数IDictionary
。问题是关于通用案例。
答案 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}}
};
答案 1 :(得分:6)
以下博文中有一个帮助方法,可以从匿名类型创建Dictionary对象。
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)
添加单个属性。