C # Casting avec des objets à Enums

Cette question se rapporte à la coulée d'énumérations dans les méthodes génériques

Donné un enum

public enum Crustaceans
{
    Frog = 1,
    Toad = 4
}

Je peux créer une instance de mon enum assez simplement

short val = 4;
Crustaceans crusty = (Crustaceans) val;

Toutefois, si

short val = 4;
object obj = (object) val;
Crustaceans crusty = (Crustaceans)obj;

un runtime exception est levée tenter d'effectuer l'initialisation d'une croûte.

Quelqu'un peut-il expliquer pourquoi ce qui se passe, et pourquoi il n'est pas légal de faire une telle chose.

Pas ce que je voulais vraiment faire cela, mais je cam à travers un problème lorsque vous essayez d'obtenir quelque chose de semblable se passe avec les médicaments génériques et efficacement qu'est ce qui se passe sous les couvertures. c'est à dire

public T dosomething<T>(short val) where T : new()
{
    T result = (T)(object) val;
    return result;
}

Donc ce que je cherche à faire est d'avoir une fonction générique qui fonctionne avec les énumérations et non les énumérations (pas aussi critique-mais serait bien) qui peut être réglé à une valeur courte, sans jeter une exception et fait initialisation de la bonne valeur d'enum.

source d'informationauteur sweetfa