zoukankan      html  css  js  c++  java
  • 如果你知道时间的默认值...

    【情景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类型,它们都有相应的默认值(enum的默认值同int,都是0),因此,这些默认值不为null的值类型可以用作泛型类型System.Nullable<T>中的参数T, 即可以声明public DateTime? Time { get; set; },这时,上面的输出Time属性值时就是null了。

  • 相关阅读:
    update set from 语句用法
    SQL WITH AS用法
    SQL插入数据的多种方式
    本地临时表“#” 与 全局临时表 "##"
    sql常用语句
    关于mybatis转义SQL动态执行语句变慢的原因
    关于SQL中OUTER APPLY 得用法
    AspNetPager控件的简单使用
    JQuery常用的案例
    JQuery的学习笔记
  • 原文地址:https://www.cnblogs.com/buguge/p/3781405.html
Copyright © 2011-2022 走看看