【发布时间】:2018-06-30 18:31:08
【问题描述】:
我的代码的相关部分如下。在MyTreeView 类中(下面的最后一段代码),代码行TncExtensions.TncNodeAdd(this, myTreeViewNode); 生成错误CS7036 There is no argument given that corresponds to the required formal parameter 'myTreeViewNode' of 'TncExtensions.TncNodeAdd(TreeNodeCollection, MyTreeView_Abstract, MyTreeViewNode_Abstract)'
为什么编译器无法确定我的 TreeNodeCollection 扩展方法的第二个形参是什么?
public static class TncExtensions
{
public static int TncNodeAdd(this TreeNodeCollection nodes, MyTreeView_Abstract myTreeView, MyTreeViewNode_Abstract myTreeViewNode)
{
return myTreeView.Nodes.Add(myTreeViewNode);
}
}
public abstract class MyTreeViewNode_Abstract : TreeNode
{
public MyTreeViewNode_Abstract(string text) : base(text)
{
}
}
public class MyTreeViewNode : MyTreeViewNode_Abstract
{
public MyTreeViewNode(string text) : base(text)
{
}
}
public abstract class MyTreeView_Abstract : TreeView
{
}
public class MyTreeView : MyTreeView_Abstract
{
public void CreateTree()
{
MyTreeViewNode myTreeViewNode = new MyTreeViewNode("node text");
TncExtensions.TncNodeAdd(this, myTreeViewNode);
}
}
【问题讨论】:
-
您声明了一个扩展方法,但您像使用普通静态方法一样使用它。如果您像普通静态方法一样调用它,则需要提供 all 参数(在您的情况下是 3,而不仅仅是 2)。也就是说,尝试像普通静态方法一样调用扩展方法看起来有点不对劲。也许可以查看有关扩展方法的教程,以阐明它们通常是如何使用/调用的。
-
你使用的扩展方法不对。
-
另外,你的扩展方法中
nodes参数的具体目的是什么?你的扩展方法没有使用nodes,那么它有什么意义呢? -
@HansPassant:我不同意。最初,我使用基本
TreeNodeCollection Add方法将自定义TreeView节点添加到自定义TreeView。在我的自定义TreeView中,我有一些自定义属性来跟踪我的自定义TreeView的状态。在没有钩子到Add方法的情况下,我必须在each 调用基本Add方法之后立即使用内联代码更新自定义属性。通过使用Add扩展方法和将自定义节点绑定到自定义TreeView的自定义属性,我可以在一个中心位置更新自定义TreeView属性。
标签: c# winforms extension-methods treenodecollection