Как сравнить System.Enum
с enum
без бокса? Например, как я могу сделать следующий код без бокса enum
?
enum Color
{
Red,
Green,
Blue
}
...
System.Enum myEnum = GetEnum(); // Returns a System.Enum.
// May be a Color, may be some other enum type.
...
if (myEnum == Color.Red) // ERROR!
{
DoSomething();
}
Чтобы быть конкретным, целью здесь является не сравнение базовых значений. В этом случае базовые значения не должны иметь значения. Вместо этого, если две Enums имеют одно и то же базовое значение, они не должны считаться равными, если они представляют собой два разных вида перечислений:
enum Fruit
{
Apple = 0,
Banana = 1,
Orange = 2
}
enum Vegetable
{
Tomato = 0,
Carrot = 1,
Celery = 2
}
myEnum = Vegetable.Tomato;
if (myEnum != Fruit.Apple) // ERROR!
{
// Code should reach this point
// even though they're the same underlying int values
Log("Works!");
}
Это в основном те же функции, что и Enum.Equals(Object)
. К сожалению, Equals()
требует бокса перечисления, что в нашем случае было бы озорной задачей.
Есть ли хороший способ сравнить два произвольных перечисления без бокса или иначе создать кучу накладных расходов?
Спасибо за любую помощь!