将 Enum 转换为对象并使用 == 运算符的问题

问题描述 投票:0回答:2

在我看来,这个C#程序应该输出“True”,但实际上它输出“False”,如何解释?

顺便说一句,我问了ChatGPT(免费版)和Gemini(免费版),他们都给出了“正确”的答案。

static void Main(string[] args)
{
  object obj = System.IO.FileMode.Create;
  Console.WriteLine(obj == (object)System.IO.FileMode.Create);
}
c#
2个回答
0
投票

简而言之 - 因为拳击

装箱是将值类型转换为类型对象或该值类型实现的任何接口类型的过程。当公共语言运行时 (CLR) 装箱值类型时,它会将值包装在 System.Object 实例内并将其存储在托管堆上

装箱后,您将获得

object
,当比较对象时,它们是通过引用进行比较,而不是通过值进行比较。


0
投票

System.IO.FileMode.Create
作为枚举,它存储为简单值。但是当你将它转换为对象时,它会被装箱(包装)到一个对象中。由于您正在创建两个单独的装箱对象,因此比较它们会检查它们是否是内存中的同一对象,而不是它们是否具有相同的值。

© www.soinside.com 2019 - 2024. All rights reserved.