У меня есть следующее перечисление
public enum TESTENUM
{
Value1 = 1,
Value2 = 2
}
Я затем хочу использовать это для сравнения с целочисленной переменной, которую я имею, как это:
if ( myValue == TESTENUM.Value1 )
{
}
Но чтобы сделать этот тест, я должен бросить перечисление следующим образом (или по-видимому объявить целое число как перечисление типа):
if ( myValue == (int) TESTENUM.Value1 )
{
}
Существует ли способ, которым я могу сказать компилятору, что перечисление является серией целых чисел, так, чтобы я не делал этого броска или переопределить переменную?
Нет. Вам нужно привести значение перечисления. Если вы не хотите приводить, то рассмотрите вариант использования класса с постоянными значениями int:
class static EnumLikeClass
{
public const int Value1 = 1;
public const int Value2 = 2;
}
Однако в этом есть некоторые недостатки; отсутствие безопасности типов является большой причиной для использования enum
.
Вы можете указать перечислению, что оно содержит целые числа:
public enum TESTENUM: int
{
Value1 = 1,
Value2 = 2
}
Однако вам все равно придется приводить их вручную,
Нет (в отличие от C ++), и по уважительной причине безопасности типов.
Помните, что приведение значения перечисления в вашем контексте - это именно как вы сообщаете компилятору, что "смотри сюда, я знаю, что это значение перечисления имеет тип int, поэтому используй его как таковое".