2016-01-09 69 views
-5

有没有什么办法可以比较下面的if语句中的时间和空值是否有效?请详细解释我。关于c的常见问题#

static DateTime time; 

if (time == null) 
{ 
    /* do something */ 
} 
+0

你可以[试试](https://dotnetfiddle.net/)相当容易,看看会发生什么... –

+0

你也标记这个'c'的任何理由? (之前编辑过的'java') –

+0

我在问一个问题。没有给出任何答案。如果你没有答案,请不要做无关紧要的评论。 –

回答

2

DateTime是一个struct,这意味着它是一个值类型,而不是引用类型。 null是一个只适用于参考的概念。值类型在逻辑上不可能是null

Java通过创建包装类型(比较int及其对应类Integer)来解决此问题。但是,C#采用不同的方法,使用nullables的概念。

创建一个空值很简单,只需在原始类型中添加一个?即可。

static DateTime? time; 

这可能会导致比较if (time == null),要成为true

0

由于DateTime的是,你不能分配空给它的值类型,但正好为空的介绍这些情况下(没有值) - 改用可为空的日期时间:从这里

参考:Set an empty DateTime variable

DateTime? myTime = null;

在C#

DateTime? time = null; 

if (time == null) 
{ 
    /* do something */ 
} 

修改后的代码将工作在C#

+1

你能解释一下你在这里做了什么吗?确保有人阅读这篇文章,看看你做了什么 - 这个问号是做什么的?为什么在编译版本时没有编译?什么是功能差异? –

0

既然你还没有赋值的变量时,你不能把它进行比较。另外,由于Datetime不是可以为空的对象,因此不能将其指定为null。

+0

它被标记为'static',因此它可能出现在类定义中,在这种情况下,即使它没有明确定义,您也可以在比较中使用它。 –

1
  1. 使用DateTime.MinValue为有效日期时间是默认
static DateTime time; 
if (time == DateTime.MinValue){/* do something */} 
  • FF你应该使用值 “DateTime.MinValue” 实际上,也许可以为可空的类型
  • static Nullable<DateTime> time;// same as static DateTime? time; 
    
    if (time.HasValue) 
    { 
        /* do something */ 
    }