在foreach循环中无法识别对象类型

Zip*_*ppy 3 c# winforms

所以,我今天遇到了一个奇怪的问题.

假设我有这样的TreeNode定义:

TreeNode node = new TreeNode();
node.Nodes.Add(new TreeNode { Name = "aaa" });
node.Nodes.Add(new TreeNode { Name = "bbb" });
Run Code Online (Sandbox Code Playgroud)

然后我调用一个递归方法

ColorNode(node.Nodes, Color.Green);
Run Code Online (Sandbox Code Playgroud)

该方法如下所示:

void ColorNode(TreeNodeCollection nodes, System.Drawing.Color Color)
{
    foreach (var child in nodes)
    {
        child.ForeColor = Color;
        if (child.Nodes != null && child.Nodes.Count > 0)
            ColorNode(child.Nodes, Color);
    }
}
Run Code Online (Sandbox Code Playgroud)

在那个foreach循环中如果我保持var childVisual Studio哭泣

对象不包含ForeColor的定义,也没有扩展方法ForeColor可以找到类型为ojbect的第一个参数.

object不包含节点的定义,也没有扩展方法可以找到接受object类型的第一个参数的节点.

但是,如果我改变var childTreeNode child一切正常.

有人可以解释这种行为吗?

Pat*_*man 7

因为TreeNodeCollection只有一个枚举器object(它实现了IEnumerable,而不是IEnumerable<TreeNode>),var变成了object.自己键入变量,您的代码将编译:

foreach (TreeNode child in nodes)
{ }
Run Code Online (Sandbox Code Playgroud)