Преобразование перечисления к интервалу

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

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

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

if ( myValue == TESTENUM.Value1 )
{
}

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

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

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

5
задан Paul Michaels 22 June 2010 в 07:59
поделиться

4 ответа

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

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

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

12
ответ дан 18 December 2019 в 09:47
поделиться

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

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

Однако вам все равно придется приводить их вручную,

2
ответ дан 18 December 2019 в 09:47
поделиться

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

1
ответ дан 18 December 2019 в 09:47
поделиться

Помните, что приведение значения перечисления в вашем контексте - это именно как вы сообщаете компилятору, что "смотри сюда, я знаю, что это значение перечисления имеет тип int, поэтому используй его как таковое".

2
ответ дан 18 December 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: