如何定义一个函数,以便可以选择性地传递struct参数,但是能够在函数内部知道它是否被传递?我想要完成的任务将类似于:
function SomeFunction(string str = null)
{
if (str == null) { ... }
}
调用不带参数的上述函数会触发if (str == null)...
条件:
SomeFunction();
上述方法不适用于struct类型的参数。给出以下结构:
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。这些可能是合法的价值,这让我无法知道参数是否实际传递给函数或留空。
如何定义此参数,以便在调用中未指定时,我可以在函数中检测到该参数?
答案 0 :(得分:3)
使用可空类型(可选择使用重载方法,如下所示DoSomething
)来检查是否传递了值。
public function SomeFunction(MyStruct? mystruct)
{
if(mystruct.HasValue)
DoSomething(mystruct.Value);
else
DoSomething();
}
答案 1 :(得分:1)
public function SomeFunction(MyStruct? mystruct) { }
您可以使用可空类型