如何正确解析Dictionary<string, object>成
How to correctly parse Dictionary<string, object> into
我正在研究 HtmlHelper.AnonymousObjectToHtmlAttributes
。
它适用于匿名对象:
var test = new {@class = "aaa", placeholder = "bbb"};
var parseTest= HtmlHelper.AnonymousObjectToHtmlAttributes(test);
结果parseTest
有两个键值对。
但对于 Dictionary
对象:
var attrsInDict = new Dictionary<string,object>() {
{"class", "form-control"},
{"placeholder", "Select one..."}
};
var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(attrsInDict );
得到的attrs
是一个奇怪的对象,有4个Keys和4个Values。这 4 个键是 Comparer、Count、Keys、Values.
一些其他SO post询问两者之间的区别(here)。所选答案显示
There's not too much difference...
真的吗?解析 attrsInDict
并获得与我们从匿名对象获得的结果相同的结果的正确方法是什么?
因为,我打算在下面的代码中合并属性:
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
foreach (var item in attrs)
{
if (attr.ContainsKey(item.Key))
{
attr[item.Key] = $"{attr[item.Key]} {item.Value}";
}
else
{
attr.Add(item.Key, item.Value);
}
}
结果并不奇怪——它们正是我对名为 AnonymousObjectToHtmlAttributes
的方法所期望的结果。该方法需要像 test
这样的输入,一个实际的匿名对象,而不是像 Dictionary
.
这样的具体 class 的实例
在传递 Dictionary
实例的情况下,您看到的是它的 public 属性,它们确实是 Comparer
、Count
、Keys
和 Values
属性。
AnonymousObjectToHtmlAttributes
的 return 类型是 RouteValueDictionary
。 class 有一个接受 IDictionary<string, object>
.
的构造函数重载
要正确使用字典,请执行以下操作:
var attrs = new RouteValueDictionary(attrsInDict);
Comparer、Count、Keys 和 Values 是 class Dictionary 的 public 属性。所以你得到的正是你所要求的。如果你想要实际的键值对,你需要迭代字典。
AnonymousObjectToHtmlAttributes
方法很可能使用反射来遍历所提供类型的 public 属性。如其 documentation 所示,除了索引器之外的唯一属性是 Comparer
、Count
、Keys
和 Values
.
我正在研究 HtmlHelper.AnonymousObjectToHtmlAttributes
。
它适用于匿名对象:
var test = new {@class = "aaa", placeholder = "bbb"};
var parseTest= HtmlHelper.AnonymousObjectToHtmlAttributes(test);
结果parseTest
有两个键值对。
但对于 Dictionary
对象:
var attrsInDict = new Dictionary<string,object>() {
{"class", "form-control"},
{"placeholder", "Select one..."}
};
var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(attrsInDict );
得到的attrs
是一个奇怪的对象,有4个Keys和4个Values。这 4 个键是 Comparer、Count、Keys、Values.
一些其他SO post询问两者之间的区别(here)。所选答案显示
There's not too much difference...
真的吗?解析 attrsInDict
并获得与我们从匿名对象获得的结果相同的结果的正确方法是什么?
因为,我打算在下面的代码中合并属性:
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
foreach (var item in attrs)
{
if (attr.ContainsKey(item.Key))
{
attr[item.Key] = $"{attr[item.Key]} {item.Value}";
}
else
{
attr.Add(item.Key, item.Value);
}
}
结果并不奇怪——它们正是我对名为 AnonymousObjectToHtmlAttributes
的方法所期望的结果。该方法需要像 test
这样的输入,一个实际的匿名对象,而不是像 Dictionary
.
在传递 Dictionary
实例的情况下,您看到的是它的 public 属性,它们确实是 Comparer
、Count
、Keys
和 Values
属性。
AnonymousObjectToHtmlAttributes
的 return 类型是 RouteValueDictionary
。 class 有一个接受 IDictionary<string, object>
.
要正确使用字典,请执行以下操作:
var attrs = new RouteValueDictionary(attrsInDict);
Comparer、Count、Keys 和 Values 是 class Dictionary 的 public 属性。所以你得到的正是你所要求的。如果你想要实际的键值对,你需要迭代字典。
AnonymousObjectToHtmlAttributes
方法很可能使用反射来遍历所提供类型的 public 属性。如其 documentation 所示,除了索引器之外的唯一属性是 Comparer
、Count
、Keys
和 Values
.