C# 枚举装箱与等式
为什么返回错误C# 枚举装箱与等式,c#,.net,enums,boxing,C#,.net,Enums,Boxing,为什么返回错误 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 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;
}
而这是真的吗
public static bool IsOneOf(Enum self, params Enum[] values)
{
foreach (var value in values)
if (self.Equals(value))
return true;
return false;
}
正如JB所说,拳击。通过将枚举更改为方向,可以看到这一点:
public static bool IsOneOf(Directions self, params Directions[] values)
{
foreach (var value in values)
if (self == value)
return true;
return false;
}
返回true。枚举未实现==相等运算符,但它会重写Equals方法 因为它没有实现==,所以系统执行引用相等性检查。请注意,System.Enum是一个类而不是一个结构。因此,诸如Directions.Left之类的值被装箱。在这种特殊情况下,装箱对象最终是单独的对象,因此它们无法通过引用相等性测试
编译器对具体的枚举类型(如方向)理解==,但编译器不会对System.Enum类型执行此特殊处理。Nice。“拳击”并不像你的解释那样是一个完整的解释。谢谢你的技术解释!