0
votes

Système possible.InvalidcastException Casting Enum to int?

J'ai l'extrait de code suivant:

        public static object DoThing(object objectIn) => objectIn is Enum
            ? Convert.ChangeType(objectIn, Enum.GetUnderlyingType(objectIn.GetType()))
            : objectIn;


7 commentaires

Peut être utile: Stackoverflow.com/questions/943398/...


Enums peut avoir des types différents autres que int (bien qu'ils ne le font généralement pas). Donc, l'avertissement est techniquement valide.


Pourriez-vous que votre échantillon soit aussi proche que possible du code d'origine? Vous ne pouvez pas lancer le type Enum à un int. Vous aurez besoin de tester param.value par rapport à la définition réelle énumée qu'il représente.


@RUUDKOBES J'ai changé pour être un programme complet.


@Servy n'est pas d'accord avec le vote étroit. La question dans ce cas est liée au fait que Enums stocke un type de sous-jacent variable, qui n'a rien à voir avec la question liée.


@Sarov la réponse que vous avez accepté ne répète que ce qui est dans la duplicata. Si vous pensez que ce n'est pas la réponse, pourquoi ne l'avez-vous pas révélé au lieu de l'accepter.


@Servy peut-être que je n'ai pas compris la question liée, mais je ne pensais pas que cela ait eu quelque chose à voir avec une boîte à repasser avec un sous-type int.


3 Réponses :


1
votes

Un énumé en boîte n'est convertible que sur son type sous-jacent. Cela échouera:

object o = 1; //boxed int
var s = (short)o; //fails


0 commentaires

-1
votes

Vous pouvez essayer ci-dessous le code mentionné dans la réponse donnée à C # itération d'un énumé? (Indexation d'un système.Array)

L'intention principale ici est de savoir que chaque valeur ENUM aura deux parties - un nom et une valeur. La valeur peut être convertie en entiers.

ENUM.GETVALUES Renvoyer une matrice de toutes valeurs dans cette énumération. Si vous le souhaitez, alors seulement la première ligne de code est requise. xxx

espère que cela aide.


2 commentaires

Comment cela répond-il à la question?


@ Klausgütter - Merci de me donner une perspective différente. Mon intention était de clarifier quel nom et votre valeur sont et comment les valeurs peuvent être imprimées. Je vais ajouter plus de détails dans la réponse pour préciser.



0
votes

En supposant que vous travaillez avec C # 7, vous pouvez attribuer le résultat du motif correspondant à une variable.

Si vous avez une énumération comme: P>

if (param.Value is TestEnum enumValue)
{
    parameter.Value = (int)enumValue;
}


0 commentaires