gpt4 book ai didi

c# - 在 C# 中检查空值对象的最佳语法是什么

转载 作者:太空狗 更新时间:2023-10-29 23:53:48 25 4
gpt4 key购买 nike

我总觉得写的不对

if (MyObject)
// do something

或者反过来

if (!MyObject)
// do something

但是你可以说它没有

那么冗长
if (MyObject != null)
// do something

if (MyObject == null)
// do something

是否有任何非主观的理由来使用一个而不是另一个?

最佳答案

在 C# 中,你不能这样做

if (MyObject) 

检查 null。这是编译时错误(如果该类没有隐式 bool 转换运算符)。

if (!MyObject)

如果类没有重载 operator ! 以返回 bool 值(或可以隐式转换为 bool 值的值),则也是无效的。

所以你必须坚持使用 obj == nullobj != null

总而言之,非主观原因是能够编译您的代码!

更新(故事):

曾几何时,在古老的 C 语言中,没有 bool 类型。零被认为是 false,每个非零值都被认为是 true。你可以写

while(1) { }

创建一个无限循环。
你也可以做类似的事情

int n  = 10;
while (n--) { }

有一个执行n 次的循环。这个策略的问题是:

int x = 10;
if (x = 0) { // bug: meant to be x == 0
}

您遗漏了一个字符并造成了一个错误(大多数现代 C 编译器会对此语句发出警告,但它仍然是有效的 C)。

这就是为什么你会看到这样的代码

if (5 == variable) 

if (NULL == pObj)

很多地方不容易出现上述错误。

C# 设计者决定要求 bool 表达式作为ifwhile 等的条件,并且不允许将类型(除非他们明确声明重载运算符,这是不鼓励的)强制转换为 bool 值以减少出错的机会。所以像这样:

object x = null;
if (x) { }

int y = 10;
if (y) { }
while (y--) { }

在 C 中有效,根本不要在 C# 中编译
无论如何,这都不是风格或协议(protocol)的问题。

关于c# - 在 C# 中检查空值对象的最佳语法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com