为什么返回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;
}
答案 0 :(得分:23)
Enum没有实现==等于运算符,但它确实覆盖了Equals方法。
由于它没有实现==,系统执行引用相等性检查。请注意,System.Enum是一个类而不是结构。因此,诸如Directions.Left之类的值被加框。在这种特殊情况下,盒装对象最终成为单独的对象,因此它们无法通过引用相等性测试。
编译器理解==具体的Enum类型(例如Directions),但编译器不对System.Enum类型执行此特殊处理。
答案 1 :(得分:4)
正如JB所说,拳击。您可以通过从Enum更改为Directions:
来查看此内容public static bool IsOneOf(Directions self, params Directions[] values)
{
foreach (var value in values)
if (self == value)
return true;
return false;
}
返回true。