datas.DpHour = (row.Field<string>("DAHour") ?? string.Empty).Trim();
datas.DpCop = (double)(row.Field<decimal?>("CopQty") ?? 0);问题一:“row.Field<string>”和“row.Field<decimal?>”中,“string”和“decimal?”的作用是什么?
        直接“Row["DAHour"]”,不行么?这样写有什么好处?问题二:“(row.Field<decimal?>("CopQty") ?? 0)”中,“decimal?”什么意思?怎么会用一个“?”,它的作用是什么?问题三:“(row.Field<decimal?>("CopQty") ?? 0)”中,“??”什么意思,有什么作用?

解决方案 »

  1.   

    decimal?为可空decimal类型,可以给decimal赋null。?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。 
      

  2.   

    decimal?相当于Nullable<decimal>类型,表示有null的值类型,decimal是值类型,没有null,有时候会不方便,比如数据库的decimal字段可能是null,这样就不好表示,所以用了Nullable泛型表示有null的值类型,而decimal?则是它的简写形式,
      

  3.   

    明显是标识数据类型
    后面加个?表示可空,和数据库中字段允许为空差不多, int你不能赋成null int?可以
    判断??左边表达式是否为null,如是null则取右边表达式的值,否则就取左边表达式的值
      

  4.   

    row.Field<string>相当于Row["DAHour"].ToString,因为Row["DAHour"]不是string类型,要取得字段的string值,必须做转化,而row.Field<string>就是把字段值转化为string的比较简单的写法,
      

  5.   

    ??运算法用于转换null值,相当于row.Field<decimal?>("CopQty") ==null??0:row.Field<decimal?>("CopQty") ,也是简写,
      

  6.   

    可以为null值,上面大部分解释都是对的
      

  7.   


    类型?:表示可空类型??:表示,如果??左边为NULL则取??右边的