为什么会返回 False
public enum Directions { Up, Down, Left, Right }
static void Main(string[] args)
{
bool matches = IsOneOf(Directions.Right, Directions.Left, Directions.Right);
Console.WriteLine(matches);
Console.Read();
}
public static bool IsOneOf(Enum self, params Enum[] values)
{
foreach (var value in values)
if (self == value)
return true;
return false;
}
当这返回 True 时?
public static bool IsOneOf(Enum self, params Enum[] values)
{
foreach (var value in values)
if (self.Equals(value))
return true;
return false;
}
最佳答案
Enum 没有实现 == 相等运算符,但它确实覆盖了 Equals 方法。
由于它没有实现==,系统执行引用相等性检查。请注意,System.Enum 是一个类而不是结构。因此,诸如 Directions.Left 之类的值被装箱。在这种特殊情况下,装箱的对象最终成为单独的对象,因此它们无法通过引用相等性测试。
编译器将 == 理解为具体的枚举类型(例如 Directions),但编译器不会对 System.Enum 类型进行这种特殊处理。
关于c# - 枚举装箱和平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/652673/