如何用一行C#代码将DBNULL或空字符串转换为Double?
C#一行代码处理DBNull/空字符串转Double/Int(VS2008兼容)
你原来的代码存在两个问题:一是??运算符只能处理引用类型的null,但ADODB.Recordset返回的数据库NULL值是DBNull.Value(非null对象),所以这个逻辑并没有真正处理数据库NULL;二是空字符串无法被Double.Parse解析,导致格式错误。
以下是几种兼容VS2008(.NET 3.5)的一行代码解决方案:
转Double的方案
方案1:嵌套三元运算符直接解析
double amount = Double.Parse(MyDataSet.Fields["Amount"].Value is DBNull || string.IsNullOrEmpty(MyDataSet.Fields["Amount"].Value.ToString().Trim()) ? "0" : MyDataSet.Fields["Amount"].Value.ToString());
逻辑:先判断字段值是否为DBNull,或者转字符串并去除首尾空白后为空,满足任一条件就用"0"来解析,否则解析原字段值。
方案2:TryParse更安全(避免非数字字符串异常)
如果字段可能存在非数字的无效值,用TryParse更稳妥,不会抛出异常:
double amount; Double.TryParse(MyDataSet.Fields["Amount"].Value is DBNull ? "0" : MyDataSet.Fields["Amount"].Value.ToString().Trim(), out amount);
注:如果解析失败(比如值是"abc"),amount会被设为0,符合你的需求。如果要写成一行,可以这样:
double amount = (MyDataSet.Fields["Amount"].Value is DBNull || string.IsNullOrEmpty(MyDataSet.Fields["Amount"].Value.ToString().Trim())) ? 0 : Double.Parse(MyDataSet.Fields["Amount"].Value.ToString());
转Int的方案
把上述代码中的Double替换为Int32即可:
int amount = Int32.Parse(MyDataSet.Fields["Amount"].Value is DBNull || string.IsNullOrEmpty(MyDataSet.Fields["Amount"].Value.ToString().Trim()) ? "0" : MyDataSet.Fields["Amount"].Value.ToString());
或者安全的TryParse版本:
int amount; Int32.TryParse(MyDataSet.Fields["Amount"].Value is DBNull ? "0" : MyDataSet.Fields["Amount"].Value.ToString().Trim(), out amount);
内容的提问来源于stack exchange,提问作者Sameera
相关产品推荐
相关产品推荐

