C# - 为什么Object类没有true运算符?

Tr1*_*1et 1 c# operators

对不起,如果我的问题似乎很愚蠢.

在C++中,此代码工作:

Foo* foo = new Foo();
if (foo)
    ....;
else
    ....;
Run Code Online (Sandbox Code Playgroud)

在C#中,这不起作用:

Object obj = new Object();
if (obj)
    ....;
else
    ....;
Run Code Online (Sandbox Code Playgroud)

因为Object类不能隐式转换为bool(显然,没有问题),并且它不实现true运算符.

所以我的问题是为什么不Object实现true运算符(只检查它本身是否为空,听起来很容易)?是因为代码可读性还是其他原因?

Eri*_*ert 6

你的问题的根本答案是在接受的答案中给出的答案:因为C#旨在避免,而不是使 C的设计错误永久化.

但更具体地说:你问为什么类型没有实现operator true.这个问题的答案的问题是:该目的operator true是落实短路&&||运营商.由于不希望object实施&或者&&或者|或者||,没有理由实施operator trueoperator false.


Abi*_*n47 5

这是因为代码清晰.C#的许多设计选择都是以这样的目标为代码编写的,这样就可以立即明白它正在尝试做什么.如果你有类似的东西:

Object obj = ...;
if (obj)
     ....
Run Code Online (Sandbox Code Playgroud)

什么if(obj)意思?是否检查是否obj正确?是否检查是否null?是否检查是否0?有人不敢清楚地看到代码,并且需要程序员查阅C#文档以了解这种特定语法的作用.所以相反,C#你说

Object obj = ...;
if (obj == null)
    ....
Run Code Online (Sandbox Code Playgroud)

这样,很明显你要做的是什么.

这就是为什么C#要求您实例化局部变量以及在代码中使用它们之前声明它们的原因.未实例化变量的值是不明确的,并且取决于编译器的配置,因此C#不是强迫您进行研究或进行猜测,而是使其成为必须以您的意图明确的方式编写代码.