Преобразование enum в int - PullRequest
5 голосов
/ 22 июня 2010

У меня есть следующее перечисление

public enum TESTENUM
{
    Value1 = 1,
    Value2 = 2
}

Затем я хочу использовать это для сравнения с имеющейся у меня целочисленной переменной, например:

if ( myValue == TESTENUM.Value1 )
{
}

Но чтобы выполнить этот тест, я должен привести перечисление следующим образом (или предположительно объявить целое число как тип перечисления):

if ( myValue == (int) TESTENUM.Value1 )
{
}

Есть ли способ, которым я могу сказать компилятору, что enum - это серия целых чисел, так что мне не нужно делать это приведение или переопределять переменную?

Ответы [ 4 ]

12 голосов
/ 22 июня 2010

Нет. Вам нужно привести значение enum. Если вы не хотите использовать приведение, рассмотрите возможность использования класса с постоянными значениями типа int:

class static EnumLikeClass
{
    public const int Value1 = 1;
    public const int Value2 = 2;
}

Однако в этом есть некоторые недостатки; отсутствие безопасности типов является большой причиной для использования enum.

2 голосов
/ 22 июня 2010

Имейте в виду, что приведение значения enum в вашем контексте в точности равно как вы говорите компилятору: «Посмотрите здесь, я знаю, что это значение перечисления имеет тип int, поэтому используйте его как таковой».

2 голосов
/ 22 июня 2010

Вы можете указать перечислению, что оно содержит целые числа:

public enum TESTENUM: int
{
    Value1 = 1,
    Value2 = 2
}

Однако вы должны все равно разыграть их вручную,

1 голос
/ 22 июня 2010

Нет, нет (в отличие от C ++), и по хорошей причине безопасности типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...