DateTime.hasvalue与datetime == null,哪个更好,为什么?

6
我想提出一个关于控制日期时间的空值的问题。
if (mydatetime != null)

或者

if(mydatetime.hasvalue)

哪个更好,或者说更合适,为什么?谢谢。

它们并不完全等价。HasValue仅适用于变量为Nullable的情况。 - Ňɏssa Pøngjǣrdenlarp
第一个是真的,如果它有一个值,第二个是真的,如果它没有一个值。可能有一个太多的 ! - René Vogt
我的是可空日期时间(datetime? my datetime=null),在这种情况下有什么区别吗? - Aurora
@Aurora 没有区别,只要保持一致即可。 - user1666620
2个回答

5

!=null的第一个比较是有效的比较,而第二个比较只能在变量声明为Nullable时使用,换句话说,只有在DateTime变量声明为Nullable时才能使用.HasValue进行比较。

例如:

DateTime dateInput; 
// Will set the value dynamically
if (dateInput != null)
{ 
   // Is a valid comparison         
}
if (dateInput.HasValue)
{ 
   // Is not a valid comparison this time        
}

当...而...
DateTime? dateInput; // nullable declaration
// Will set the value dynamically
if (dateInput != null)
{ 
   // Is a valid comparison         
}
if (dateInput.HasValue)
{ 
   // Is also valid comparison this time        
}

3

如果您询问

if (mydatetime != null) 

您正在检查变量是否已被实例化。

如果它没有被实例化,下面的语句将会给您一个NullReferenceException

if(!mydatetime.hasvalue)

因为您试图访问一个null对象的属性。

只有在将DateTime声明为Nullable时,它才会显示相同的行为。

Nullable<DateTime> mydatetime = null;

Console.WriteLine(mydatetime.HasValue);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接