首页 > 代码库 > 如果你知道时间的默认值...
如果你知道时间的默认值...
【情景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了。