J'ai l'extrait de code suivant:
public static object DoThing(object objectIn) => objectIn is Enum ? Convert.ChangeType(objectIn, Enum.GetUnderlyingType(objectIn.GetType())) : objectIn;
3 Réponses :
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
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. P>
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. p> espère que cela aide. p> p>
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.
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; }
Peut être utile: Stackoverflow.com/questions/943398/...
Enums peut avoir des types différents autres que
int code> (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 code> à un int. Vous aurez besoin de tester
param.value code> 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é i> 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 i> int.