我在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?
顺便说一句,秒被初始化为一个字节。
如何克服此错误的任何帮助或建议?
答案 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
}