码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-13 00:20:39      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:class   ext   get   使用   string   set   

【情景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

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

标签:class   ext   get   使用   string   set   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!