【发布时间】:2014-01-20 03:05:44
【问题描述】:
如何检查是否将可选参数传递给方法?
public void ExampleMethod(int required, string optionalstr = "default string",
int optionalint = 10)
{
if (optionalint was passed)
return;
}
另一种方法是使用Nullable<T>.HasValue(MSDN definitions,MSDN examples):
int default_optionalint = 0;
public void ExampleMethod(int required, int? optionalint,
string optionalstr = "default string")
{
int _optionalint = optionalint ?? default_optionalint;
}
【问题讨论】:
-
我通常做的是给它一个默认值(在你的情况下是 fi -1)。当它的值与 -1 不同时,它已通过。你也可以使 int 可以为空(int?)并给它一个默认的 null
-
为什么要检查?默认的意义在于你不需要知道
-
@pm_2,来自 MSDN:“作为可能使用可为空类型的示例,请考虑普通布尔变量如何具有两个值:true 和 false。没有表示“未定义”的值“。”
-
可空类型和可选参数是一回事。
-
如果你只是想避免重复的常量比较(if ("default string" == "default string") 而不是真的检查参数是否被传递,你可以使用反射来获取默认值,然后与之相比。可能有点过头了,但是您应该能够更改签名中的默认参数而无需更改代码。stackoverflow.com/a/29156478/586754
标签: c# nullable argument-passing optional-parameters