为什么c#允许这样做?(将null检查为int)

为什么c#允许这样做?(将null检查为int),c#,nullable,C#,Nullable,可能重复: 为什么C#允许: class-MyClass { 公共int-MyInt; } 静态void Main(字符串[]参数) { MyClass m=新的MyClass(); 如果(m.MyInt==null)/我认为,这与我们为什么要编译的原因相同 if(false) Console.WriteLine("never get here"); 永远不会执行的事情 值得一提的是,是的,您不会得到错误,但您会得到一个警告。那么?if(true==false),它也可以编译。为什么不

可能重复:

为什么C#允许:

class-MyClass
{
公共int-MyInt;
}
静态void Main(字符串[]参数)
{
MyClass m=新的MyClass();

如果(m.MyInt==null)/我认为,这与我们为什么要编译的原因相同

if(false)
   Console.WriteLine("never get here");
永远不会执行的事情


值得一提的是,是的,您不会得到错误,但您会得到一个警告。

那么?
if(true==false)
,它也可以编译。为什么不呢?如果相等运算符不接受某些操作数,那就太傻了。它没有理由不编译,但是它可能会被删除,因为它毫无意义。你可以检查asm,看看它是否被删除。@RoyiNamir和
true
永远都不能
false
;这完全一样。Eric Lippert已经回答了这个问题,我想()@downvoter:原因还是出于爱好的downvoting?有很多人喜欢在没有投票的情况下进行downvoteexplanation@Tigran我没有投反对票,因为我不相信这是对这个问题的回答。它更适合作为评论。但是
Console.Write(1/0);
不编译。
if(false)
   Console.WriteLine("never get here");