在引用类型与null合并的情况下,为什么这不是C#编译器中的编译器警告?这有什么意义吗?
obj2 = obj ?? null;
答案 0 :(得分:11)
您应该阅读my essay on the subject。
简单地说:为了使编译器警告存在,它必须是:
您建议的警告不符合要求1和4.据我所知,您是第一个想到这一点的人,因此它不能成为警告,因为编译器团队中没有人想到它。并且它不太可能被意外打字,那为什么它应该是一个警告呢?当您错误输入可能错误的内容时,会有警告告诉您。它也失败了要求3,因为代码显然不是错误,它只是不必要的复杂。编译器不会为x * 1
提供警告,其中x
也是整数。
答案 1 :(得分:7)
它使有意义,它只是不是很有用。
两者都不是:
i = i + 0;
但编译器也没有抱怨。 为什么要这样?只要您的请求在语法上是正确的,编译器就会执行它所说的内容 - 它就是这样。
答案 2 :(得分:2)
你的例子并不完全有意义,但这样的事情确实如此;
d = a ?? b ?? c ?? null;
在这里,我说的是取三个的第一个非空值,如果它们全部为空,则只取空。
答案 3 :(得分:1)
你可以编写很多没有意义的东西,编译器不必将它们中的每一个都指向一个警告。
答案 4 :(得分:1)
虽然声明不是很有用,但为什么会警告你?
如果obj
不为空,则会将obj2
分配给obj
。其他obj2
已分配给null
。这是完全合法的。
答案 5 :(得分:1)