日期:2014-05-18  浏览次数:20922 次

这里的“?”什么意思
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)”中,“??”什么意思,有什么作用?

------解决方案--------------------
decimal?为可空decimal类型,可以给decimal赋null。

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


------解决方案--------------------
decimal?相当于Nullable<decimal>类型,表示有null的值类型,decimal是值类型,没有null,有时候会不方便,比如数据库的decimal字段可能是null,这样就不好表示,所以用了Nullable泛型表示有null的值类型,而decimal?则是它的简写形式,
------解决方案--------------------
明显是标识数据类型
后面加个?表示可空,和数据库中字段允许为空差不多, int你不能赋成null int?可以
判断??左边表达式是否为null,如是null则取右边表达式的值,否则就取左边表达式的值
------解决方案--------------------
row.Field<string>相当于Row["DAHour"].ToString,因为Row["DAHour"]不是string类型,要取得字段的string值,必须做转化,而row.Field<string>就是把字段值转化为string的比较简单的写法,
------解决方案--------------------
??运算法用于转换null值,相当于row.Field<decimal?>("CopQty") ==null??0:row.Field<decimal?>("CopQty") ,也是简写,
------解决方案--------------------
可以为null值,上面大部分解释都是对的
------解决方案--------------------

类型?:表示可空类型。。。

??:表示,如果??左边为NULL则取??右边的