2014-10-19 77 views
0

如何定义一个函数,以便可以选择传递一个结构参数,但是能够知道函数内部是否已通过?如何指定null作为结构类型的默认参数

function SomeFunction(string str = null) 
{ 
    if (str == null) { ... } 
} 

调用不带参数的上述功能将触发if (str == null)...条件:

SomeFunction(); 

上述方法不类型的参数工作,我所试图实现有异曲同工之处结构。鉴于以下结构:

public struct MyStruct 
{ 
    public int SomeInt; 
    public double SomeDouble; 
} 

这会产生一个错误,没有规范的转换:

public function SomeFunction(MyStruct mystruct = null) { } 

但是,当我定义功能:

public function SomeFunction(MyStruct mystruct = default(MyStruct)) { } 

并调用与功能:

SomeFunction(); 

在输入函数mystruct时,对于SomeInt包含0,对于SomeDouble包含0.00。这些可能是合法值,这使我无法知道参数是否实际传递给函数或保留为空。

我该如何定义这个参数,如果它没有在调用中指定,我可以检测到该函数内?

回答

3

使用空类型(任选地与DoSomething如下所示重载方法)来检查的值是否被传递或没有。

public function SomeFunction(MyStruct? mystruct) 
{ 
    if(mystruct.HasValue) 
     DoSomething(mystruct.Value); 
    else 
     DoSomething(); 
} 
+0

这也许是TGH指出的最好的方式。我可以忍受它,但我仍然被迫在函数调用中指定一个'null'?换句话说,我不能在调用中将它留空,因为nullable不会为被调用函数提供默认值。 – rwkiii 2014-10-19 04:49:38

+1

如果你想传递一个空参数而不是'null',那么使用重载的方法。 即。 '公共函数SomeFunction(){SomeFunction(null); }' – grovesNL 2014-10-19 04:51:03

+0

明白了。谢谢。你和TGH都提供了同样的答案。我希望我能把它们标记为正确的......一方面TGH先回答。另一方面,他比你拥有更多的积分。 :我不喜欢因为选择艰难而将其标记为答案。你提供了更多的输入/跟进。所以谢谢。 – rwkiii 2014-10-19 04:55:14

1
public function SomeFunction(MyStruct? mystruct) { } 

可以使用空类型

+0

现在很明显,你指出了!我没有想到这一点。谢谢TGH。 – rwkiii 2014-10-19 04:45:56