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也被初始化为字节。
如何克服这个错误有什么帮助或建议吗?由于数据类型是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
}