You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用一行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:35:36