Этот вопрос связан с литьем перечислений в общих методах
Учитывая перечисление
public enum Crustaceans
{
Frog = 1,
Toad = 4
}
Я могу создать экземпляр моего перечисления достаточно просто
short val = 4;
Crustaceans crusty = (Crustaceans) val;
Однако, если
short val = 4;
object obj = (object) val;
Crustaceans crusty = (Crustaceans)obj;
исключение для выполнения запускается, пытаясь выполнить инициализацию crusty.
Может ли кто-нибудь объяснить, почему это происходит, и почему это не является законным делать такую вещь.
Не то, чтобы я действительно хотел это сделать, но я решаю проблему, пытаясь получить что-то подобное с дженериками, и эффективно это то, что происходит под обложками. то есть.
public T dosomething<T>(short val) where T : new()
{
T result = (T)(object) val;
return result;
}
Итак, что я пытаюсь сделать, это иметь общую функцию, которая работает с перечислениями и не-перечислениями (не так критична, но будет приятной), которая может быть установлена на короткое значение, не вызывая исключения и фактически инициализируя правильную значение перечисления.