c# null DateTime可选参数

本文关键字:参数 DateTime null | 更新日期: 2023-09-27 18:19:00

我在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?

seconds也被初始化为字节。

如何克服这个错误有什么帮助或建议吗?

c# null DateTime可选参数

由于数据类型是DateTime?(又名Nullable<DateTime>),您首先必须检查它是否有一个值(调用.HasValue),然后通过调用Value访问它的值:

seconds = (byte) = now.Value.Second;

(注意,当now为空时,代码将抛出异常,因此您必须检查HasValue !)

或者,如果你想默认它:

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

等于:

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

可以使用.???运算符

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
}