在引用类型与 null 合并的情况下,为什么这不是 C# 编译器中的编译器警告?在任何情况下这是有意义的吗?
obj2 = obj ?? null;
你应该阅读我关于这个主题的文章。
简而言之:为了存在编译器警告,它必须是:
您提出的警告不符合要求 1 和 4。据我所知,您是第一个想到这一点的人,因此它不能成为警告,因为编译器团队中没有人想到它。而且不太可能是偶然输入的,那为什么要警告呢?当您输错可能会输错的内容时,会有警告告诉您。它也没有满足要求 3,因为代码没有明显错误,只是不必要的复杂。编译器也不会对x * 1
where x
is an integer 给出警告。
这是有道理的,它只是不是很有用。
既不是:
i = i + 0;
但是编译器也没有抱怨这一点。为什么要呢?只要您的请求在语法上是正确的,编译器就会执行它被告知的事情 - 就是这样。
你的例子并不完全有意义,但像这样的事情;
d = a ?? b ?? c ?? null;
在这里,我是说取三个中的第一个非空值,如果它们都是空的,那么就取空。
你可以写很多没有意义的东西,编译器不必将它们中的每一个都指向一个警告。
虽然该语句不是很有用,但它为什么会警告您?
如果obj
不为空,obj2
则分配给obj
。否则obj2
分配给null
。这是完全合法的。