gpt4 book ai didi

c# - .Net 2+ : why does if( 1 == null ) no longer throw a compiler exception?

转载 作者:太空狗 更新时间:2023-10-29 22:56:35 25 4
gpt4 key购买 nike

我以 int 为例,但这适用于 .Net 中的任何值类型

在 .Net 1 中,以下内容会引发编译器异常:

int i = SomeFunctionThatReturnsInt();

if( i == null ) //compiler exception here

现在(在 .Net 2 或 3.5 中)该异常已消失。

我知道这是为什么:

int? j = null; //nullable int

if( i == j ) //this shouldn't throw an exception

问题是因为 int? 可以为 null,而 int 现在隐式转换为 int?。上面的语法是编译器的魔法。我们真的在做:

Nullable<int> j = null; //nullable int

//compiler is smart enough to do this
if( (Nullable<int>) i == j)

//and not this
if( i == (int) j)

所以现在,当我们执行 i == null 时,我们得到:

if( (Nullable<int>) i == null )

既然 C# 正在执行编译器逻辑来计算它,为什么它不能足够聪明地在处理像 null 这样的绝对值时不这样做?

最佳答案

我不认为这是一个编译器问题本身;整数值永远不会为 null,但将它们等同的想法并非无效;这是一个始终返回 false 的有效函数。编译器知道;代码

bool oneIsNull = 1 == null;

编译,但给出编译器警告:The result of the expression is always 'false' since a value of type 'int' is never equal to 'null' of type '<null>' .

因此,如果您想要返回编译器错误,请转到项目属性并为此错误打开“将警告视为错误”,您将再次开始将它们视为破坏构建的问题。

关于c# - .Net 2+ : why does if( 1 == null ) no longer throw a compiler exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62606/

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