我有一个DataTable,它有许多列.其中一些列可以为空.
DataTable dt; // Value set.
DataRow dr; // Value set.
// dr["A"] is populated from T-SQL column defined as: int NULL
Run Code Online (Sandbox Code Playgroud)
那么,什么是从DataRow中的值转换为可空变量的最干净形式.
理想情况下,我可以做类似的事情:
int? a = dr["A"] as int?;
Run Code Online (Sandbox Code Playgroud)
编辑:原来你可以这样做,副作用是如果你的Schema类型没有整数,那么这总是会返回null.Ruben使用的答案dr.Field<int?>("A")确保类型不匹配不会无声地失败.当然,这将通过彻底的单元测试来获得.
相反,我通常会输入以下内容:
int? a = dr["A"] != DBNull.Value ? (int)dr["A"] : 0;
Run Code Online (Sandbox Code Playgroud)
这是一堆更多的击键,但更重要的是,有更多的空间让某人用错误的击键来填充内容.是的,单元测试会选择它,但我宁愿完全停止它.
对于这种情况,什么是最干净,最不容易出错的模式.