gpt4 book ai didi

c# - 编译器不应允许 Guid == null

转载 作者:IT王子 更新时间:2023-10-29 03:52:28 24 4
gpt4 key购买 nike

The behaviour described below is specific to .net-3.5 only

我刚刚遇到了 C# 编译器中最令人惊讶的行为;

我有以下代码:

Guid g1 = Guid.Empty;
bool b1= (g1 == null);

好吧,Guid 不可为空,因此它永远不能等于 null。我在第 2 行中进行的比较 总是返回 false

如果你对整数做同样的事情,编译器会发出警告说结果总是假的:

int x=0;
bool b2= (x==null);

我的问题是:为什么编译器允许您将 Guid 与 null 进行比较
据我所知,它已经知道结果总是假的。
内置转换的完成方式是否让编译器假定 null 是一个可能的值?
我在这里遗漏了什么吗?

最佳答案

马克是正确的。定义自己的相等运算符的值类型也会自动免费获得定义的提升为可空版本。采用两个可为 null 的 guid 的可为 null 的相等运算符适用于这种情况,将被调用,并将始终返回 false。

在 C# 2 中,这会产生一个警告,但出于某种原因,它会停止为 guid-to-null 产生警告,但会继续为 int-to-null 产生警告。我不知道为什么;我还没有时间去调查。

我为这个错误道歉;在 C# 3 中重写可空逻辑时,我可能搞砸了警告检测代码路径之一。向语言添加表达式树主要改变了可空算术运算的实现顺序;我在移动该代码时犯了很多错误。这是一些复杂的代码。

关于c# - 编译器不应允许 Guid == null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2177850/

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