C#null DateTime可选参数

时间:2015-10-23 09:39:29

标签: c# datetime

我在C#中遇到一个问题,我希望将DateTime对象作为函数的可选参数传递,如下所示:

public bool SetTimeToNow(DateTime? now = null)
{
    if (now == null)
    {
       now = new DateTime();
       now = DateTime.Now;
    }
}

工作正常,但是当我想现在使用该对象时如下:

seconds = ( byte ) now.Second;

我收到错误错误:

'System.Nullable<System.DateTime>' does not contain a definition for
'Second' and no extension method 'Second' accepting a first argument of type
'System.Nullable<System.DateTime>' could be found (are you missing using 
 directive or an assembly reference?

顺便说一句,秒被初始化为一个字节。

如何克服此错误的任何帮助或建议?

2 个答案:

答案 0 :(得分:3)

由于数据类型为DateTime?(又名Nullable<DateTime>),您首先必须检查它是否具有值(call .HasValue),然后通过调用{{1}来访问其值}}:

Value

(请注意,当seconds = (byte) = now.Value.Second; 为空时,该代码将引发异常,因此您必须检查now!)

或者,如果你想默认它:

HasValue

与以下内容相同:

seconds = (byte) = now.HasValue ? now.Value.Second : 0;

答案 1 :(得分:1)

您可以使用.???运算符

seconds = (byte) (now?.Second ?? 0); // if seconds is type of byte
seconds = now?.Second; // if seconds is type of byte?

任何使用默认参数的方式对我来说都是不必要的。您可以使用方法重载而不是使用可为空的日期时间。

public bool SetTimeToNow()
{
   return SetTimeToNow(DateTime.Now); // use default time.
}

public bool SetTimeToNow(DateTime now)
{
    // Do other things outside if
}