我有一个带有一堆默认日期时间的方法?参数。我希望能够处理空值。我的意思是,如果调用者传入null,我也想处理它。
所以,我不想写:
public void MethodName(DateTime? signedConsent2 = null) {
}
我试过了:
public void MethodName(DateTime? signedConsent2 = (DateTime?)default(DateTime)) {
}
但我得到"默认参数必须是编译时常数"。
首先,我不明白为什么default(DateTime)
是编译时常量,但(DateTime?)default(DateTime)
不是。{1}}。第二,除了形式重载方法之外,还有解决这个问题的方法(由于我有很多参数,这将是很多工作)。
提前致谢。
答案 0 :(得分:3)
您的方法需要两次重载:
public void MethodName()
{
MethodName(default(DateTime));
}
public void MethodName(DateTime? signedConsent2)
{
}
答案 1 :(得分:2)
我相信您正在寻求处理多种情况。就像调用方法一样:
MethodName();
MethodName(null); //or MethodName(default(DateTime?));
在没有参数的情况下调用它意味着与使用null
或DateTime?
值调用它不同的东西。
在这种情况下,您有没有其他选项,只能定义两个重载。您无法使用默认参数处理此问题。您无法知道在没有参数或保持DateTime?
值的有效null
参数的情况下调用方法。在任何一种情况下,您的参数都会以null
结尾。
public void MethodName()
{
//Method without any parameter called
MethodName(default(DateTime?));// call overload
}
public void MethodName(DateTime? signedConsent2 = default(DateTime?))
{
}
或public void MethodName(DateTime? signedConsent2 = null)
有关:
首先,我不明白为什么默认(DateTime)是编译时间 常量但是(DateTime?)默认值(DateTime)不是。
第二个代码(DateTime?)default(DateTime)
正在进行显式转换,这是一个运行时操作,因此也就是错误。
答案 2 :(得分:0)
我会像你最初那样声明参数:
public void MethodName(DateTime? signedConsent2 = null) {
}
然后在使用它们的时候,合并默认值:
var x = signedConsent2 ?? default(DateTime);
这样做的一个优点是,您可以更改默认值,而不必更改方法签名。这是件好事。