如何在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"]);
原有版本报错原因
- object版本报错:返回值为
object类型,直接赋值给string、int等强类型变量时缺少显式类型转换,触发类型不匹配错误。 - 字符串重载版本报错:
DBNull.Value是DBNull类型的专属实例,和string类型不存在相等比较逻辑,编译器直接判定语法非法;且从数据库读取的空值本身是DBNull类型,无法传入输入参数为string的重载,该实现没有适用场景。
内容的提问来源于stack exchange,提问作者AndyD273
相关产品推荐
相关产品推荐

