首页 > 其他 > 详细

如果你知道时间的默认值...

时间:2014-06-13 00:19:54      阅读:377      评论:0      收藏:0      [点我收藏+]

【情景1】执行如下测试代码:

string str;

Console.WriteLine(str); //报错,使用了未赋值的局部变量"str"  ----DateTime也是这个情况

 

【情景2】定义实体类

class DateTimeAndStringTest {

    public DateTime Time { get; set; }

    public string StringText { get; set; }

}

执行如下测试代码:

DateTimeAndStringTest obj = new DateTimeAndStringTest();

Console.WriteLine("{0},{1},{2}", DateTime.MinValue, obj.Time, obj.StringText == null);//结果:0001/1/1 0:00:00, 0001/1/1 0:00:00, True

 

可见,在这个实体类对象里,其string类型的属性默认值是Null,而Datetime类型的属性的默认值是DateTime.MinValue,不是null。 

所以,你如果写下面的判断 Console.WriteLine(obj.Time == null ? DateTime.MinValue : obj.Time); IDE会提示你,“检测到无法访问的表达式代码”

如果你知道时间的默认值,就再不要做上面的无用的判断了。

 

这种不同最后还是归结于值类型&引用类型的区别。

String类是sealed class,即引用类型,默认值为空。而DateTime、int等都是struct类型,它们都有相应的默认值,因此,这些默认值不为null的值类型可以用作泛型类型System.Nullable<T>中的参数T, 即可以声明public DateTime? Time { get; set; },这时,上面的输出Time属性值时就是null了。

如果你知道时间的默认值...,布布扣,bubuko.com

如果你知道时间的默认值...

原文:http://www.cnblogs.com/buguge/p/3781405.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!