20人参与 • 2026-03-09 • Asp.net
# 在 c# 编程(尤其是业务开发)中,空值校验是保障程序稳定性、避免空引用异常(`nullreferenceexception`)的核心手段。结合你这段物料分类新增的代码,我会从**场景+原因+示例**三个维度,清晰告诉你什么情况必须做空值校验。
### 一、必须做空值校验的核心场景
#### 1. 外部输入/入参校验(最基础也最关键)
**适用场景**:
- 方法/函数的入参(尤其是外部系统、用户输入、第三方接口传递的参数)
- 从配置文件、数据库、消息队列读取的数据
- api 接口接收的请求参数
**为什么要做**:
外部数据不受你的代码控制,可能是 null、空字符串、格式错误等,直接使用会导致程序崩溃。
**对应你代码的示例**:
```csharp
// 你的代码中对入口参数的校验(必须做)
if (receiveeventinfo == null || string.isnullorwhitespace(receiveeventinfo.content))
{
logtexthelper.warn("物料分类新增失败:接收的事件信息为空或内容为空");
return;
}如果不校验:receiveeventinfo.content 为 null 时,会直接抛出 nullreferenceexception,导致整个方法崩溃,甚至影响调用方。
适用场景:
jsonconvert.deserializeobject 的结果)findsingle 查不到数据会返回 null)convert.toint32、tryparse 失败的情况)为什么要做: 反序列化/查询可能因数据格式错误、数据不存在等原因返回 null,后续访问其属性(如 eventinfo.archive)会直接报错。
对应你代码的示例:
// 反序列化后的对象校验(必须做)
if (eventinfo == null || string.isnullorwhitespace(eventinfo.archive))
{
logtexthelper.warn("物料分类新增失败:反序列化后的archive数据为空");
return;
}
如果不校验:eventinfo 为 null 时,eventinfo.archive 会触发空引用异常,中断业务流程。
适用场景:
dtoarchive.name.zhcn)list.add() 前,list 可能为 null)为什么要做: c# 中多级属性访问时,只要其中一级为 null,就会抛出空引用异常。
对应你代码的示例:
// 空值保护:防止 name 为 null 导致 zhcn 访问失败 info.typename = dtoarchive.name?.zhcn ?? string.empty;
如果不做保护:dtoarchive.name 为 null 时,dtoarchive.name.zhcn 会直接报错。
适用场景:
为什么要做: 核心字段为空会导致数据库操作失败(如主键为空、外键关联失败),依赖数据不存在会导致业务逻辑错误。
对应你代码的示例:
// 父级分类查询结果校验(必须做)
if (p_info != null)
{
info.parentid = p_info.id;
info.erpparentid = p_info.erpid;
}
else
{
string errormsg = $"物料分类【{dtoarchive.code}】父级数据不存在,父级erpid:{dtoarchive.parent}";
logtexthelper.error(errormsg);
throw new exception(errormsg);
}
如果不校验:p_info 为 null 时,p_info.id 会报错,且会将无效的父级id插入数据库,导致数据脏污。
list.count 前,校验 list != nullhasvaluefile.readalltext 可能返回 null(文件不存在)不是所有场景都需要校验,以下情况可省略:
var info = new materialtypeinfo(); 后,info 不可能为 null,无需校验。! 操作符明确标记非空(如 name!),且代码经过严格静态检查。string.isnullorwhitespace)。到此这篇关于c#中空值校验应用场景分析的文章就介绍到这了,更多相关c#空值校验内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论