Создание действительно генерируемого словаря констант во время компиляции в C # на самом деле не простая задача. На самом деле, ни один из ответов здесь действительно не достигает этого.
Существует одно решение, которое соответствует вашим требованиям, хотя не обязательно хорошее; помните, что в соответствии со спецификацией C # таблицы переключателей компилируются в таблицы с постоянными хэш-переходами. То есть они являются постоянными словарями, а не серией утверждений if-else. Итак, рассмотрим оператор switch-case следующим образом:
switch (myString)
{
case "cat": return 0;
case "dog": return 1;
case "elephant": return 3;
}
Это именно то, что вы хотите. И да, я знаю, это ужасно.