Lui*_*ipe 46 .net c# guid .net-3.5
下面描述的行为仅适用于.net-3.5
我刚刚遇到了C#编译器中最令人惊讶的行为;
我有以下代码:
Guid g1 = Guid.Empty;
bool b1= (g1 == null);
好吧,Guid不可为空,因此永远不能等于null.我在第2行进行的比较总是返回false.
如果对整数做同样的事情,编译器会发出警告,说结果总是为false:
int x=0;
bool b2= (x==null);
我的问题是:为什么编译器允许你将Guid与null进行比较?
据我所知,它已经知道结果总是错误的.
内置转换是否以编译器假定null为可能值的方式完成?
我在这里错过了什么吗?
Eri*_*ert 81
马克是对的.定义自己的相等运算符的值类型自动获得定义的可升级版本,免费.采用两个可以为空的guid的可空等式运算符适用于这种情况,将被调用,并且将始终返回false.
在C#2中,这产生了一个警告,但由于某种原因,这停止了guid-to-null的警告但继续产生int-to-null的警告.我不知道为什么; 我还没来得及调查.
我为这个错误道歉; 在重写C#3中的可空逻辑时,我可能搞砸了一个警告检测代码路径.在语言中添加表达式树主要改变了可空算术运算的实现顺序; 我犯了许多错误移动代码.这是一些复杂的代码.
| 归档时间: | 
 | 
| 查看次数: | 12806 次 | 
| 最近记录: |