J'ai besoin d'imprimer les valeurs de l'enum et de leurs correspondants underyling valeurs de certains types je accquire par la réflexion. Cela fonctionne bien la plupart du temps.
Toutefois, si l'enum est déclarée à l'intérieur d'un type générique, Enum.GetValues
jette l'exception suivante:
[System.NotSupportedException: Cannot create arrays of open type. ]
at System.Array.InternalCreate(Void* elementType, Int32 rank, Int32* pLengths, Int32* pLowerBounds)
at System.Array.CreateInstance(Type elementType, Int32 length)
at System.Array.UnsafeCreateInstance(Type elementType, Int32 length)
at System.RuntimeType.GetEnumValues()
Code complet pour la reproduction :
using System;
public class Program
{
public static void Main()
{
var enumType= typeof(Foo<>.Bar);
var underlyingType = Enum.GetUnderlyingType(enumType);
Console.WriteLine(enumType.IsEnum);
foreach(var value in Enum.GetValues(enumType))
{
Console.WriteLine("{0} = {1}", value, Convert.ChangeType(value, underlyingType));
}
}
}
public class Foo<T>
{
public enum Bar
{
A = 1,
B = 2
}
}
Ou test ici
Est-ce le comportement souhaité et comment dois-je travailler autour?
La construction d'un type serait un workarround mais inacceptable pour moi, car il serait trop compliqué.