Разбор смешанных значений (char и int) - PullRequest
1 голос
/ 15 марта 2012

У меня есть странное перечисление, где некоторые значения char, а другие int:

public enum VendorType{
    Corporation = 'C',
    Estate = 'E',
    Individual = 'I',
    Partnership = 'P',
    FederalGovernment = 2,
    StateAgencyOrUniversity = 3,
    LocalGovernment = 4,
    OtherGovernment = 5
}

Я дергаю некоторые данные из текстового файла, который предоставляет символ для этого типа(например, I или 4), и я использую это для поиска строго типизированного значения перечисления (например, VendorType.Individual и VendorType.LocalGovernment соответственно).

Код, который я использую для этогоэто:

var valueFromData = 'C'; // this is being yanked from a File.IO operation.
VendorType type;
Enum.TryParse(valueFromData, true, out type);

Пока все хорошо, когда дело доходит до парсинга значений int ... но когда я пытаюсь проанализировать значения char, переменная type не анализируется иприсвоено 0.


Вопрос: Можно ли оценить значения перечисления char и int?Если да, то как?

Примечание: Я не хочу использовать пользовательские атрибуты для назначения текстовых значений, как я видел в некоторых других примерах взлома в Интернете.

1 Ответ

9 голосов
/ 15 марта 2012

Тип вашего перечисления int. Все значения int s - символы конвертируются в целые числа. Таким образом, VendorType.Corporation имеет значение (int)'C', равное 67.

Посмотреть онлайн: ideone

Чтобы преобразовать персонажа в VendorType, вам нужно просто разыграть:

VendorType type = (VendorType)'C';

Посмотрите, как работает онлайн: ideone


РЕДАКТИРОВАТЬ: Ответ правильный, но я добавляю окончательный код, который понадобился, чтобы это заработало.

// this is the model we're building
Vendor vendor = new Vendor(); 

// out value from Enum.TryParse()
VendorType type;

// value is string from File.IO so we parse to char
var typeChar = Char.Parse(value);

// if the char is found in the list, we use the enum out value
// if not we type cast the char (ex. 'C' = 67 = Corporation)
vendor.Type = Enum.TryParse(typeChar.ToString(), true, out type) ? type : (VendorType) typeChar;
...