C# 如何将null的equalant指定为struct类型的默认参数

C# 如何将null的equalant指定为struct类型的默认参数,c#,struct,C#,Struct,我如何定义一个函数,以便可以选择性地传递结构参数,并且能够在函数内部知道它是否被传递?我试图实现的目标类似于: function SomeFunction(string str = null) { if (str == null) { ... } } 不带参数调用上述函数将触发if(str==null).条件: SomeFunction(); 上述方法不适用于struct类型的参数。给定以下结构: public struct MyStruct { public int Som

我如何定义一个函数,以便可以选择性地传递结构参数,并且能够在函数内部知道它是否被传递?我试图实现的目标类似于:

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
时,包含0表示
SomeInt
,0.00表示
SomeDouble
。这些可能是合法的值,这使我无法知道参数是实际传递给函数还是留空

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

public function SomeFunction(MyStruct? mystruct) { }
可以使用可为空的类型

您可以使用可空类型来检查是否传递了值

public function SomeFunction(MyStruct? mystruct)
{
   if(mystruct.HasValue)
       DoSomething(mystruct.Value);
   else
       DoSomething();
}
使用可为空的类型(可选地与重载方法一起使用,如下所示,
DoSomething
)检查是否传递了值

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

很明显,你已经指出了!我没想到。谢谢你,TGH。你指出了这一点,这一点很明显!我没想到。谢谢TGH。正如TGH所指出的,这可能是最好的方式。我可以接受它,但我仍然被迫在函数调用中指定一个
null
?换句话说,我不能在调用中将其保留为空,因为nullable不为被调用的函数提供默认值?如果要传入空参数而不是
null
,请使用重载方法。例如,
public function SomeFunction(){SomeFunction(null);}
。谢谢你和TGH都给出了相同的答案。我希望我能把它们都标记为正确的。。。一方面,TGH先回答。另一方面,他的观点比你多得多S我不喜欢把两者都作为答案,因为选择很难。您提供了更多的输入/后续信息。所以谢谢。正如TGH所指出的,这可能是最好的方式。我可以接受它,但我仍然被迫在函数调用中指定一个
null
?换句话说,我不能在调用中将其保留为空,因为nullable不为被调用的函数提供默认值?如果要传入空参数而不是
null
,请使用重载方法。例如,
public function SomeFunction(){SomeFunction(null);}
。谢谢你和TGH都给出了相同的答案。我希望我能把它们都标记为正确的。。。一方面,TGH先回答。另一方面,他的观点比你多得多S我不喜欢把两者都作为答案,因为选择很难。您提供了更多的输入/后续信息。谢谢你。