关于枚举转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
相关产品推荐
相关产品推荐

