c#默认日期时间?方法参数,其中null表示某事

时间:2015-03-04 20:07:58

标签: c# datetime

我有一个带有一堆默认日期时间的方法?参数。我希望能够处理空值。我的意思是,如果调用者传入null,我也想处理它。

所以,我不想写:

public void MethodName(DateTime? signedConsent2 = null) {
}

我试过了:

public void MethodName(DateTime? signedConsent2 = (DateTime?)default(DateTime)) {
}

但我得到"默认参数必须是编译时常数"。

首先,我不明白为什么default(DateTime)是编译时常量,但(DateTime?)default(DateTime)不是。{1}}。第二,除了形式重载方法之外,还有解决这个问题的方法(由于我有很多参数,这将是很多工作)。

提前致谢。

3 个答案:

答案 0 :(得分:3)

您的方法需要两次重载:

public void MethodName()
{
    MethodName(default(DateTime));
}

public void MethodName(DateTime? signedConsent2)
{

}

答案 1 :(得分:2)

我相信您正在寻求处理多种情况。就像调用方法一样:

MethodName();
MethodName(null); //or MethodName(default(DateTime?));

在没有参数的情况下调用它意味着与使用nullDateTime?值调用它不同的东西。

在这种情况下,您有没有其他选项,只能定义两个重载。您无法使用默认参数处理此问题。您无法知道在没有参数或保持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);

这样做的一个优点是,您可以更改默认值,而不必更改方法签名。这是件好事。