You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于枚举转Object后使用==运算符结果不符的技术问询

问题解释

这是因为枚举属于值类型,每次将值类型转换为object(装箱操作)时,都会生成一个全新的引用实例。

看你的代码:

static void Main(string[] args)
{
  object obj = System.IO.FileMode.Create;
  Console.WriteLine(obj == (object)System.IO.FileMode.Create);
}
  • 第一行object obj = System.IO.FileMode.Create:把枚举值Create装箱,生成一个引用实例存在obj变量中。
  • 第二行的(object)System.IO.FileMode.Create:再次对同一个枚举值执行装箱操作,生成另一个完全独立的引用实例。

而当==运算符两边都是object类型时,它比较的是引用地址,不是值的内容。两个不同的引用实例地址自然不相同,所以最终输出False。

如果要比较值是否相等,可以用以下两种方式:

  • 使用Equals方法:Console.WriteLine(obj.Equals((object)System.IO.FileMode.Create));,Equals默认会比较值类型的实际内容。
  • 先拆箱回枚举类型再比较:Console.WriteLine((System.IO.FileMode)obj == System.IO.FileMode.Create);,此时比较的是枚举值本身。

内容的提问来源于stack exchange,提问作者Tom Jerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:12:32