2014-02-26 33 views
3

我想声明一个函数,它具有1个必需的参数和4个可选的2D数组参数,我该怎么做?我知道让一个参数是可选的,我们应该在函数创建过程中为它添加一个值。可选的多维数组作为C#中的参数#

我也看到了我所做的下面是错误的,并具有"Array initializers can only be used in a variable or field initializer. Try using a new expression instead."错误

private String communicateToServer(String serverHostname, 
           String[,] disk = new string[] {{"dummy","dummy"}}, 
           String[,] hdd= new string[] {{"dummy","dummy"}} 
           String[,] nic= new string[] {{"dummy","dummy"}} 
           String[,] disk = new string[] {{"dummy","dummy"}} 
) 
+1

你不能那样做。 – SLaks

+2

而不是默认值'null',那么在函数中你可以做'disk = disk?新字符串[] {..};' – Blorgbeard

回答

4

这是不可能直接做,但您可以通过以下方式

private String communicateToServer(String serverHostname, 
            String[,] disk = null, 
            String[,] hdd= null, 
            String[,] nic= null) { 

    disk = disk ?? new string[] {{"dummy","dummy"}}, 
    hdd= hdd ?? new string[] {{"dummy","dummy"}} 
    nic= nic ?? new string[] {{"dummy","dummy"}} 

    ... 
} 
得到类似的效果

基本上使用null作为默认值,如果null是将值转换为实际的默认值。这确实意味着被传递的显式null将被解释为默认值。

+0

+1,因为它是我知道完成这个任务的唯一途径,但值得注意的是,这确实会消除有意无意传递的副作用。 – McAden

+0

@McAden在最后一句中注意到了这个副作用:) – JaredPar

+0

哦,所以我可以留下一个空检查器来代替我的目标, - 删除虚拟变量 - if(hdd!= null){用2D数组值}, 谢谢男人和欢呼=) – Fukkatsu