首页 新闻 赞助 找找看

Params 和默认参数 怎么让他们在一起使用

0
悬赏园豆:20 [已解决问题] 解决于 2013-01-30 17:34
如下函数: 
public DynamicTHeaderNode(string name,bool  isVisible = true,params DynamicTHeaderNode[] nodes)

params必须是最后一个参数,但是默认参数[bool  isVisible = true]也必须最后,这两者在一起使用貌似就有问题了,编译通不过啊,请各位给予解答啊.......
C#
纯粹的郭子的主页 纯粹的郭子 | 初学一级 | 园豆:62
提问于:2013-01-30 15:55
< >
分享
最佳答案
0

显式指定参数,类似这样:DynamicTHeaderNode(nodes: new DynamicTHeaderNode());

收获园豆:10
水牛刀刀 | 大侠五级 |园豆:6350 | 2013-01-30 16:01
其他回答(1)
0

我试了下你的代码编译OK啊。并且确实params在最后面。

 

收获园豆:10
滴答的雨 | 园豆:3681 (老鸟四级) | 2013-01-30 16:27

啊,那我这里怎么通不过呢?

支持(0) 反对(0) 纯粹的郭子 | 园豆:62 (初学一级) | 2013-01-30 16:50

编译肯定能通过,主要是调用这个函数的时候就通不过了。

支持(0) 反对(0) 纯粹的郭子 | 园豆:62 (初学一级) | 2013-01-30 16:51

@纯粹的郭子: 我编译了下面代码

    public class DynamicTHeaderNode
    {
        public DynamicTHeaderNode(string name, bool isVisible = true, params DynamicTHeaderNode[] nodes)
        { }
    }

 

你的报什么错呢?还是因为.net的版本不对呢?.net4.0下我编译OK

支持(0) 反对(0) 滴答的雨 | 园豆:3681 (老鸟四级) | 2013-01-30 16:53

@滴答的雨: 

你构造一个DynamicTHeaderNode它就通不过了,例如:

DynamicTHeaderNode node = new DynamicTHeaderNode("a",
new DynamicTHeaderNode("a1"),
new DynamicTHeaderNode("a2"));
这个调用就有问题了。
支持(0) 反对(0) 纯粹的郭子 | 园豆:62 (初学一级) | 2013-01-30 16:57

@滴答的雨: 

你构造一个DynamicTHeaderNode它就通不过了,例如:

DynamicTHeaderNode node = new DynamicTHeaderNode("a",
new DynamicTHeaderNode("a1"),
new DynamicTHeaderNode("a2"));
这个调用就有问题了。
支持(0) 反对(0) 纯粹的郭子 | 园豆:62 (初学一级) | 2013-01-30 16:58

@纯粹的郭子:

1楼乃高人也。

调用过程中你要么全部给出,要么“顺序”给出部分参数,要么使用命名式参数(使用命名参数你可以不顾虑参数的顺,没列出的命名参数将使用默认值),如下:

            DynamicTHeaderNode node = new DynamicTHeaderNode(name:"a",nodes:
                        new DynamicTHeaderNode[]
                        {  
                            new DynamicTHeaderNode("a1"),
                            new DynamicTHeaderNode("a2")
                        }
                   );
支持(0) 反对(0) 滴答的雨 | 园豆:3681 (老鸟四级) | 2013-01-30 17:10

@滴答的雨: 

恩,1楼是个好解决方案,我也找到一个解决方案,只要重载一个函数就好了,就达到一样的调用效果了。

谢谢您。

支持(0) 反对(0) 纯粹的郭子 | 园豆:62 (初学一级) | 2013-01-30 17:28

@滴答的雨: 

DynamicTHeaderNode node = new DynamicTHeaderNode(name:"a",nodes:
                        new DynamicTHeaderNode[]
                        {  
                            new DynamicTHeaderNode("a1"),
                            new DynamicTHeaderNode("a2")
                        }
                   );
其实这种写法我不太喜欢,页面端调用的时候过于繁琐,还要写参数名字,给前段使用者不好的调用方式,所以我使用了重载解决这个问题。
支持(0) 反对(0) 纯粹的郭子 | 园豆:62 (初学一级) | 2013-01-30 17:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册