J'ai reçu un Int16
à partir de la base de données, et nous devons la convertir en un type d'énumération. Cette opération est malheureusement effectuée dans une couche du code qui connaît très peu les objets, à l'exception de ce qu'elle peut recueillir par réflexion.
Ainsi, il finit par appeler Convert.ChangeType
qui échoue avec une exception de distribution invalide.
J'ai trouvé ce que je considère comme une solution de contournement malodorante, comme ceci :
String name = Enum.GetName(destinationType, value);
Object enumValue = Enum.Parse(destinationType, name, false);
Existe-t-il une meilleure solution, pour ne pas avoir à passer par cette opération String ?
Voici un programme court, mais complet, qui peut être utilisé si quelqu'un a besoin d'expérimenter :
using System;
public class MyClass
{
public enum DummyEnum
{
Value0,
Value1
}
public static void Main()
{
Int16 value = 1;
Type destinationType = typeof(DummyEnum);
String name = Enum.GetName(destinationType, value);
Object enumValue = Enum.Parse(destinationType, name, false);
Console.WriteLine("" + value + " = " + enumValue);
}
}
1 votes
Aïe... Je dois arrêter d'essayer de répondre à ce genre de questions avant d'avoir pris mon café...
0 votes
Je vois maintenant que Console.WriteLine est aussi dans une couche qui n'a pas accès au type enum. J'ai complètement mal compris. J'ai supprimé ma réponse (stupide).