如何指定null的等价物作为struct类型的默认参数

时间:2014-10-19 04:42:25

标签: c# struct

如何定义一个函数,以便可以选择性地传递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。这些可能是合法的价值,这让我无法知道参数是否实际传递给函数或留空。

如何定义此参数,以便在调用中未指定时,我可以在函数中检测到该参数?

2 个答案:

答案 0 :(得分:3)

使用可空类型(可选择使用重载方法,如下所示DoSomething)来检查是否传递了值。

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

答案 1 :(得分:1)

public function SomeFunction(MyStruct? mystruct) { }

您可以使用可空类型