【发布时间】:2011-01-11 18:44:03
【问题描述】:
下面描述的行为仅特定于 .net-3.5
我刚刚遇到了 C# 编译器中最惊人的行为;
我有以下代码:
Guid g1 = Guid.Empty;
bool b1= (g1 == null);
嗯,Guid 不能为空,因此它永远不能等于 null。 我在第 2 行中进行的比较总是返回 false。
如果你对整数做同样的事情,编译器会发出警告说结果总是错误的:
int x=0;
bool b2= (x==null);
我的问题是:为什么编译器允许您将 Guid 与 null 进行比较?
据我所知,它已经知道结果总是错误的。
内置转换是否以编译器确实假定 null 是可能值的方式完成?
我在这里有什么遗漏吗?
【问题讨论】:
-
它实际上不是重复的。 Luis 的问题是关于为什么编译器在将结构与 null 进行比较时不发出警告,而在比较值类型时却发出警告。
-
我不同意这是重复的......
-
我不认为这是重复的