当前位置:网站首页>在 C# 中如何检查参数是否为 null
在 C# 中如何检查参数是否为 null
2022-08-07 00:07:00 【dotNET跨平台】
前言
前不久,微软宣布从 C# 11 中移除参数空值检查功能,该功能允许在方法开始执行之前,在参数名称的末尾提供参数空值检查(!!操作符)。

那么,在 C# 中如何检查参数是否为 null 呢?
1. == null
这个可能是大家第一个就会想到的方法。
使用相等运算符符检查两个操作符是否相等:
if(user == null)
throw new ArgumentNullException(nameof(user));但是,==运算符可以被重载,可能导致检查空值的结果和预想的不一致:
public class User
{
...
public static bool operator ==(User user1, User user2)
{
return false;
}
}
var user = null;
if(user == null) // false
throw new ArgumentNullException(nameof(user));这时,可以使用is运算符。
2. is null
is运算符检查表达式的结果是否与给定的类型相匹配。将表达式与 null 匹配时,编译器保证不会调用用户重载的==运算符:
public class User
{
...
public static bool operator ==(User user1, User user2)
{
return false;
}
}
var user = null;
if(user is null) // true
throw new ArgumentNullException(nameof(user));3. 模式匹配
“模式匹配”是一种测试表达式是否具有特定特征的方法。模式匹配最常见的方案之一是确保值不是 null:
int? maybe = 12;
if (maybe is int number)
{
Console.WriteLine($"The nullable int 'maybe' has the value {number}");
}
else
{
Console.WriteLine("The nullable int 'maybe' doesn't hold a value");
}但是,对于检查空值功能来说,这种方式可读性较差。
4. ArgumentNullException.ThrowIfNull
如果你使用的是 C# 10,建议你使用ArgumentNullException.ThrowIfNull方法检查空值:
ArgumentNullException.ThrowIfNull(user);使用该方法的好处之一是在异常消息中会自动包含参数名称。
方法详细介绍可参看《.NET 6新特性试用 | ArgumentNullException卫语句》
结论
你是否还知道其他检查空值的方法,欢迎留言讨论。
添加微信号【MyIO666】,邀你加入技术交流群
边栏推荐
- 2022.8.4 模拟赛
- 多项式——多项式函数
- strcmp、strstr、memcpy、memmove等库函数的用法和模拟实现
- 多项式——多项式牛顿迭代
- Is it reliable to buy stocks with great wisdom?is it safe?
- 【随机数排序】
- Zscoder‘s 生成函数教程(二)
- 倒计时3天|2022 OceanBase 年度发布会亮点抢先看!
- Dark horse 2022 latest redis course notes and knowledge points (for interviews) are continuously updated
- fragment如何获取activity的点击事件
猜你喜欢

logcat: Solution for Unexpected EOF!

【高并发项目实战】工程模块化与活动会场静态化架构原理解析

【统计任意一组字符中大小写字母的个数】

Talking about API Gateway

ICCV何恺明团队又一神作:Transformer仍有继续改善的空间

关闭Win10自动更新

2022-08-05 粗糙集Rough set
![[Combat of High Concurrency Projects] Principle Analysis of Engineering Modularity and Static Architecture of Event Venues](/img/f7/8aedd3adbbb417a30c202f855a302c.png)
[Combat of High Concurrency Projects] Principle Analysis of Engineering Modularity and Static Architecture of Event Venues

leetcode 21. 合并两个有序链表(可进阶)

【字符串中处理类String的使用】
随机推荐
【验证用户输入的日期格式是否正确——工具类SimpleDateFormat类的使用】
Dark horse 2022 latest redis course notes and knowledge points (for interviews) are continuously updated
Promise的点点滴滴
jvm summary
【kali-漏洞利用】(3.4)免杀Payload 生成工具(下):Veil后门使用、监听失败原因
fragment如何获取activity的点击事件
学习jsEs6中Symbol
C51 基本函数、中断函数和库函数的详解
[Combat of High Concurrency Projects] Principle Analysis of Engineering Modularity and Static Architecture of Event Venues
性能提升400倍丨外汇掉期估值计算优化案例
SmartIDE v1.0.23 一个非常不敏捷的发布
复制天猫的宝贝上传到淘宝,SKU自定义属性值没有复制过来是什么原因?
1.基于ITIL的IT服务管理基础篇 --- 引言
Easily complete interface testing and interface documentation
2022-08-05 粗糙集Rough set
中国银河证券开户安全吗
在EXCEL中正确使用逗号分隔的CSV文件
夏天快乐的源泉
bugku 0和1的故事
多项式——多项式除法