Не забывайте, что сам тип Enum содержит кучу статических вспомогательных функций. Если все, что вы хотите сделать, это преобразовать экземпляр перечисления в соответствующий ему целочисленный тип, то приведение, вероятно, является наиболее эффективным способом.
Я думаю, что ReSharper жалуется, потому что Enum не является перечислением какого-либо конкретного типа, а сами перечисления происходят от скалярного типа значения, а не Enum. Если вам нужно адаптивное приведение типов в общем, я бы сказал, что это может хорошо вам подойти (обратите внимание, что сам тип перечисления также включен в общий:
public static EnumHelpers
{
public static T Convert<T, E>(E enumValue)
{
return (T)enumValue;
}
}
Это может быть использовано следующим образом:
public enum StopLight: int
{
Red = 1,
Yellow = 2,
Green = 3
}
// ...
int myStoplightColor = EnumHelpers.Convert<int, StopLight>(StopLight.Red);
Не могу сказать наверняка, но приведенный выше код может даже поддерживаться выводом типа C #, что позволяет следующее:
int myStoplightColor = EnumHelpers.Convert<int>(StopLight.Red);