【发布时间】:2017-04-26 10:22:58
【问题描述】:
我需要从我通过反射获取的某些类型中打印出枚举值及其相应的下标值。这在大多数情况下都可以正常工作。
但是,如果枚举是在泛型类型中声明的,Enum.GetValues 会抛出以下异常:
[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()
复制的完整代码:
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
}
}
或者测试一下here
这是理想的行为吗?我该如何解决?
构造一个类型是一种解决方法,但对我来说是不可接受的,因为它会变得太复杂。
【问题讨论】:
-
奇怪的是
Enum.GetNames(enumType)工作正常。
标签: c# generics reflection enums