代码之家  ›  专栏  ›  技术社区  ›  VA systems engineer

调用扩展方法(TreeNodeCollection Add方法)的正确方法是什么?

  •  0
  • VA systems engineer  · 技术社区  · 7 年前

    我的代码的相关部分如下。在 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);
        }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   blins    7 年前

    TncExtensions.TncNodeAdd(Nodes, this, myTreeViewNode);
    

    this.Nodes.TncNodeAdd(this, myTreeViewNode);
    

    public static int TncNodeAdd(this TreeNodeCollection nodes, MyTreeViewNode_Abstract myTreeViewNode)
    {
        return nodes.Add(myTreeViewNode);
    }
    
        2
  •  1
  •   VA systems engineer    7 年前

    Add

    修改了reza建议的添加扩展方法

    namespace TreeNodeCollectionExtensions
    {
        public static class TncExtensions
        {
            public static int Add(this TreeNodeCollection nodes, DRT.DRT_TvwNode_Abstract myTreeViewNode)
            {
                int newNodeIndex = nodes.Add(myTreeViewNode);
    
                //Do stuff to custom properties that are members of DRT_TvwNode_Abstract and classes derived from DRT_TvwNode_Abstract
    
                return newNodeIndex;
            }
        }
    }
    

    像这样用

    using TreeNodeCollectionExtensions;
    
    public class MyTreeView : MyTreeView_Abstract
    {
        public MyTreeView() : base()
        {
        }
    
        public void CreateTree()
        {
            MyTreeViewNode myTreeViewNode;
    
            //Add node to root of TreeView 
            //Using named parameter to force the compiler to
            //use the Add extension method and not the base Add method
            myTreeViewNode = new MyTreeViewNode("root node text");
            Nodes.Add(myTreeViewNode: myTreeViewNode);
    
            //Add node one level below root node of TreeView
            //Using named parameter to force the compiler to
            //use the Add extension method and not the base Add method
            myTreeViewNode = new MyTreeViewNode("level 1 node text");
            int newLevel1NodeIndex = Nodes[0].Nodes.Add(myTreeViewNode: myTreeViewNode);
    
            //Add node one level below level 1 node just created 
            //Using named parameter to force the compiler to
            //use the Add extension method and not the base Add method
            myTreeViewNode = new MyTreeViewNode("level 2 node text");
            int newLevel2NodeIndex = Nodes[0].Nodes[newLevel1NodeIndex].Nodes.Add(myTreeViewNode: myTreeViewNode);
    
            //etc., etc.
    
        }
    }
    
    推荐文章