Проблема: Я могу вернуть строковое представление одного значения enum
с помощью enum.ToString()
.В случаях многозначного enum
(например: обозначается с помощью оператора OR
|
), все, что я получаю в вызове enum.ToString()
, это целочисленное значение, поскольку enum
не может parse
.
Обходные пути / помехи: Я не могу создать несколько экземпляров одного и того же значения в enum
, например:
public enum Languages: int
{
English = 0, // From American English
English = 1, // From UK English
Spanish = 2, // From Castillian Spanish
Spanish = 3, // From Latin American Spanish
Portuguese = 4 // From Brasilian Portuguese
Portuguese = 5, // From European Portuguese
}
, поскольку это нарушаетстандарт, и IDE получает супер нахальное лицо по этому поводу.
Пример проблемы:
public enum Languages: int
{
English = 0 | 1, // American or UK
Spanish = 2 | 3, // Castillian or Latin American
Portuguese = 4 | 5, // Brasil or Portugal
MyMadeUpLanguage = 6,
}
int selectedLanguage = 1;
Languages result = (Languages)Enum.Parse(typeof(Languages), selectedLanguage);
string resultString = result.ToString(); // This is where '1' is returned and not English.
int nextSelectedLanguage = 6;
Languages differentResult = (Languages)Enum.Parse(typeof(Languages), nextSelectedLanguage);
string nextResultString = differentResult.ToString(); // This returns 'MyMadeUpLanguage', as we would expect.
Ожидания (или то, что я пытаюсь сделать):
Я ожидаю, что условие должно совпадать, поэтому 0
или 1
будет соответствовать English
, и мой результат перечисления будет Languages.English
, и, таким образом,возвращенная строка будет English
, а не 1
.
Вместо этого , по-видимому, происходит: вызов parse
enum
просто возвращается как int
, а не как Language
(ссылаясь на пример выше)так что, конечно, метод enum.ToString()
возвращает int
.
Для многозначных enum
, где возможно, что для значений enum
будет достаточно значений от 2
до x <= int.MaxValue
, как я могу получить вызов для parse
enum
для приведенияуспешно к ожидаемому enum
(что в результате вернет правильную строку в ответ на метод enum.ToString()
)?