如何指定null作为结构类型的默认参数
问题描述:
如何定义一个函数,以便可以选择传递一个结构参数,但是能够知道函数内部是否已通过?如何指定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。这些可能是合法值,这使我无法知道参数是否实际传递给函数或保留为空。
我该如何定义这个参数,如果它没有在调用中指定,我可以检测到该函数内?
答
使用空类型(任选地与DoSomething
如下所示重载方法)来检查的值是否被传递或没有。
public function SomeFunction(MyStruct? mystruct)
{
if(mystruct.HasValue)
DoSomething(mystruct.Value);
else
DoSomething();
}
答
public function SomeFunction(MyStruct? mystruct) { }
可以使用空类型
+0
现在很明显,你指出了!我没有想到这一点。谢谢TGH。 – rwkiii 2014-10-19 04:45:56
这也许是TGH指出的最好的方式。我可以忍受它,但我仍然被迫在函数调用中指定一个'null'?换句话说,我不能在调用中将它留空,因为nullable不会为被调用函数提供默认值。 – rwkiii 2014-10-19 04:49:38
如果你想传递一个空参数而不是'null',那么使用重载的方法。 即。 '公共函数SomeFunction(){SomeFunction(null); }' – grovesNL 2014-10-19 04:51:03
明白了。谢谢。你和TGH都提供了同样的答案。我希望我能把它们标记为正确的......一方面TGH先回答。另一方面,他比你拥有更多的积分。 :我不喜欢因为选择艰难而将其标记为答案。你提供了更多的输入/跟进。所以谢谢。 – rwkiii 2014-10-19 04:55:14