所以,我今天遇到了一个奇怪的问题.
假设我有这样的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 child与TreeNode child一切正常.
有人可以解释这种行为吗?
因为TreeNodeCollection只有一个枚举器object(它实现了IEnumerable,而不是IEnumerable<TreeNode>),var变成了object.自己键入变量,您的代码将编译:
foreach (TreeNode child in nodes)
{ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |