空值和重载等于运算符之间的奇怪行为

发布于 2024-11-30 11:08:05 字数 425 浏览 2 评论 0原文

可能的重复:
C# 可以将值类型与 null 进行比较

为什么值类型为重载相等运算符的DateTime和Decimal可以与空值进行比较吗?

我一直认为值类型是不可为 null 的值,但我可以编写以下代码:

DateTime dateTime = DateTime();

if(dateTime == null)
    //do something

编译不会引发异常,但比较始终为 false。

先感谢您。

Possible Duplicate:
C# okay with comparing value types to null

Why value type as DateTime and Decimal whose the equality operator is overloaded can be compared with null value?

I always thought that value types are non-nullables values, but I'm allowed to write the following code:

DateTime dateTime = DateTime();

if(dateTime == null)
    //do something

The compilation doesn't throw an exception, however the comparison is always false.

Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

奈何桥上唱咆哮 2024-12-07 11:08:05

这是因为双方都可以隐式转换为 DateTime?。这是一个不太理想的极端情况,基本上 :(

某些情况下它会发出警告,但不是针对所有情况(例如,这里不是)。

例如,使用 int

int x = 5;

if(x == null)
{
    Console.WriteLine();
}

您将收到此警告:

警告 CS0472:表达式的结果始终为“false”,因为“int”类型的值永远不等于“int”类型的“null”?

It's because there's an implicit conversion to DateTime? available from both sides. It's a bit of a corner case which isn't ideal, basically :(

In some cases it gives a warning, but not for all (so not here, for example).

For example, using int:

int x = 5;

if(x == null)
{
    Console.WriteLine();
}

You'll get this warning:

warning CS0472: The result of the expression is always 'false' since a value of type 'int' is never equal to 'null' of type 'int?'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文