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
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme cela probablement vous aidera à:
Mais cela fonctionnera seulement avec les énumérations, pour la raison évidente de l'aide
Enum.Parse(..)
Et l'utiliser comme, par exemple:
Qui sera de retour
Toad
dans votre cas.Il ya des cas où vous ne pouvez pas utiliser des Génériques (comme dans un WPF Convertisseur lorsque vous obtenez la valeur comme une
object
).Dans ce cas, vous ne peut pas lancer de
int
parce que le type enum est peut-être pasint
.Il s'agit d'un moyen de le faire sans les Génériques.
L'Exemple est donné à l'intérieur d'un WPF Convertisseur, mais le code à l'intérieur est général:
Par défaut enum les valeurs numériques de type = int.
Dans votre code, vous voulez jeter de valeur qui ont court type de type enum. Pour cela, vous avez à court de type à vos valeurs enum. Cela va fonctionner:
si vous ne voulez pas modifier la valeur par défaut les valeurs de l'enum type
ou
Dans le cas de l'ensemble des types de boîte comme les objets de la façon correcte de faire de la conversion à l'aide de Enum.ToObject méthode: