C# 11(.NET 7)中String.IsNullOrWhiteSpace()与is null的用法合理性问询
C# 11.0(.NET 7)中这段字符串判空代码的合理性分析
代码合理性结论
你写的这段代码逻辑上是合理的,但存在冗余,可以简化。
详细分析
- 冗余点说明
string.IsNullOrWhiteSpace()方法本身已经包含了null判断逻辑(.NET 7中的实现会先检查参数是否为null并返回true),所以你先通过filePath is null判断一次,再调用该方法,相当于做了两次重复的null检查。虽然不会导致错误,但完全可以简化为:
if (string.IsNullOrWhiteSpace(filePath)) return false;
- 关于你的理解验证
你提到的两个点都是正确的:
is null是语言层面的运算符,无法被重载,它直接判断引用是否为空,对于字符串这类引用类型来说,这是最可靠的空判断方式,不会因为类型重载==运算符而出现意外结果。string.IsNullOrWhiteSpace()内部确实使用了==运算符判断null,而string类型的==是被重载过的(用于比较字符串内容),不过当判断null时,CLR会优先处理引用相等逻辑,所以对于string来说,== null和is null的效果是一致的。但如果是自定义类型重载了==,那== null可能会有不同行为,is null则始终保持引用判断的逻辑。
- 额外建议
如果你的场景是只需要判断null或空字符串(不包含空白字符),可以用string.IsNullOrEmpty();如果需要包含空白字符的判断,就用string.IsNullOrWhiteSpace(),后者覆盖了前者的场景。
内容的提问来源于stack exchange,提问作者user12891798
相关产品推荐
相关产品推荐

