gpt4 book ai didi

c# - 为什么 var 在 XmlNodeList 循环中推断类型对象而不是 XmlNode?

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:15 25 4
gpt4 key购买 nike

如果像这样循环遍历 XmlNodeList

foreach (XmlNode foo in xmlNodeList) {string baa = foo.Attributes["baa"].Value;}

一切都按预期工作 - foo 显然是 XmlNode 类型并且 VS.NET IDE 显示了方法和字段。

另一方面

foreach (var foo in xmlNodeList) { string baa = foo.Attributes["baa"].Value; }

没有编译,因为这里的 foo 是object 类型。类型推断有点工作,但推断对象

显然,XmlNodeList 的元素不是一个定义的类型,但是将它们分配给 XmlNode 而不是 var 会隐式执行某些操作(转换或拆箱)。

第一个问题:背后的机制是什么?

第二个(相关)问题:如何找到可以在这种循环中使用的类型? VS.NET IDE 有帮助吗?

最佳答案

XmlNodeList 仅实现非通用 IEnumerable接口(interface),而不是类似 IEnumerable<XmlNode> 的东西与泛型。这会阻止其元素的强类型化,直到您进行适当的转换,因此编译器别无选择,只能将隐式类型声明映射到 object。在你的 foreach 中。

如果你坚持使用var关键字,可以投xmlNodeList的元素像这样:

foreach (var foo in xmlNodeList.Cast<XmlNode>())
{
string baa = foo.Attributes["baa"].Value;
}

但这很丑陋,而且无论如何都需要更多的击键。您也可以明确声明 XmlNode foo ,并让 foreach 为您即时转换它。

关于c# - 为什么 var 在 XmlNodeList 循环中推断类型对象而不是 XmlNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com