Ola*_*laf 8 c# xml type-inference
如果像这样循环遍历XmlNodeList
foreach (XmlNode foo in xmlNodeList) {string baa = foo.Attributes["baa"].Value;}
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作 - foo显然是XmlNode类型,VS.NET IDE显示方法和字段.
另一方面
foreach (var foo in xmlNodeList) { string baa = foo.Attributes["baa"].Value; }
Run Code Online (Sandbox Code Playgroud)
没有编译,因为这里foo是object类型.类型推断类型的工作,但推断对象.
显然,XmlNodeList的元素不是一个定义的类型,但是将它们分配给XmlNode而不是var会隐式地执行某些操作(强制转换或取消装箱).
第一个问题:背后的机制是什么?
第二个(相关)问题:如何找到可以在这种循环中使用的类型?VS.NET IDE有帮助吗?
XmlNodeList
仅实现非泛型IEnumerable
接口,而不是IEnumerable<XmlNode>
泛型.这样可以防止强大地键入其元素,直到您进行适当的转换,因此编译器别无选择,只能将隐式类型声明映射到object
foreach中.
如果你坚持使用var
关键字,你可以xmlNodeList
像这样强制转换元素:
foreach (var foo in xmlNodeList.Cast<XmlNode>())
{
string baa = foo.Attributes["baa"].Value;
}
Run Code Online (Sandbox Code Playgroud)
但这很难看,无论如何都需要更多的击键.您也可以只是明确声明XmlNode foo
,并让foreach随时为您投射.
归档时间: |
|
查看次数: |
909 次 |
最近记录: |