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

如何在C#中实现VB.NET的NZ函数 通用DBNull校验及空值替换默认值

C# 实现 VB.Net NZ 空值替换函数方案

最优实现(完全匹配原功能+类型安全)

推荐使用泛型实现,兼顾任意类型的空值处理,避免每次使用时的手动类型转换:

public static T NZ<T>(object input, T ifNull = default)
{
    if (input == DBNull.Value || input == null)
    {
        return ifNull;
    }
    return (T)Convert.ChangeType(input, typeof(T));
}

如果需要完全对齐原VB函数默认返回空字符串的行为,可以额外补充字符串专用重载:

public static string NZ(object input, string ifNull = "")
{
    return input == DBNull.Value || input == null ? ifNull : input.ToString();
}

使用示例

// 读取数据库用户名字段,为空则返回"匿名用户"
string userName = NZ<string>(dr["user_name"], "匿名用户");
// 读取年龄字段,为空则返回0
int age = NZ<int>(dr["age"], 0);
// 对齐VB原生用法,无默认值时返回空字符串
string address = NZ(dr["address"]);

原有版本报错原因

  1. object版本报错:返回值为object类型,直接赋值给string、int等强类型变量时缺少显式类型转换,触发类型不匹配错误。
  2. 字符串重载版本报错:DBNull.Value是DBNull类型的专属实例,和string类型不存在相等比较逻辑,编译器直接判定语法非法;且从数据库读取的空值本身是DBNull类型,无法传入输入参数为string的重载,该实现没有适用场景。

内容的提问来源于stack exchange,提问作者AndyD273

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:06:02