有没有什么办法可以比较下面的if语句中的时间和空值是否有效?请详细解释我。关于c的常见问题#
static DateTime time;
if (time == null)
{
/* do something */
}
有没有什么办法可以比较下面的if语句中的时间和空值是否有效?请详细解释我。关于c的常见问题#
static DateTime time;
if (time == null)
{
/* do something */
}
DateTime是一个struct
,这意味着它是一个值类型,而不是引用类型。 null
是一个只适用于参考的概念。值类型在逻辑上不可能是null
。
Java通过创建包装类型(比较int
及其对应类Integer
)来解决此问题。但是,C#采用不同的方法,使用nullables的概念。
创建一个空值很简单,只需在原始类型中添加一个?
即可。
static DateTime? time;
这可能会导致比较if (time == null)
,要成为true
。
由于DateTime的是,你不能分配空给它的值类型,但正好为空的介绍这些情况下(没有值) - 改用可为空的日期时间:从这里
参考:Set an empty DateTime variable
DateTime? myTime = null;
在C#
DateTime? time = null;
if (time == null)
{
/* do something */
}
修改后的代码将工作在C#
你能解释一下你在这里做了什么吗?确保有人阅读这篇文章,看看你做了什么 - 这个问号是做什么的?为什么在编译版本时没有编译?什么是功能差异? –
既然你还没有赋值的变量时,你不能把它进行比较。另外,由于Datetime不是可以为空的对象,因此不能将其指定为null。
它被标记为'static',因此它可能出现在类定义中,在这种情况下,即使它没有明确定义,您也可以在比较中使用它。 –
static DateTime time; if (time == DateTime.MinValue){/* do something */}
static Nullable<DateTime> time;// same as static DateTime? time; if (time.HasValue) { /* do something */ }
你可以[试试](https://dotnetfiddle.net/)相当容易,看看会发生什么... –
你也标记这个'c'的任何理由? (之前编辑过的'java') –
我在问一个问题。没有给出任何答案。如果你没有答案,请不要做无关紧要的评论。 –