为什么在foreach for XmlNode中使用的var不推导出实际类型,只推导出对象?

Sum*_*uma 4 c# foreach types var

让我们cls成为一个类型XmlNode

以下语句允许我访问子节点:

foreach (XmlNode child in cls.ChildNodes)
Run Code Online (Sandbox Code Playgroud)

现在当我尝试使用var:

foreach (var child in cls.ChildNodes)
Run Code Online (Sandbox Code Playgroud)

那么孩子的类型不是XmlNode,只有对象.我无法使用child.NodeType,编译器说:

object'不包含'NodeType的定义

为什么是这样?

Meh*_*taş 5

ChildNodesXmlNodeList属于定义为的类型

public abstract class XmlNodeList : IEnumerable, IDisposable
Run Code Online (Sandbox Code Playgroud)

它的枚举器返回一个object.当您使用XmlNode而不是var.net自动casts对象时XmlNode.但是当你使用时var,孩子被视为一个对象.

  • @DonBoitnott如果`XmlNodeList`实现`IEnumerable`而不是`IEnumerable <XmlNode>`那么当你使用`foreach`和那个类型的实例时它必须枚举对象. (4认同)