我想出了一个方便的小函数,让我得到了一个枚举的计数(我知道它将无法正常使用所有枚举)。而不是将Enum硬编码到函数中,以便我必须为每个想要使用它的枚举编写一个单独的函数,我想将枚举作为参数传递,但我很难弄清楚如何执行此操作。
以下是代码:
private enum MyColors { Red, Green, Blue }
private Int32 GetEnumCount()
{
Int32 i = 0;
while (Enum.IsDefined(typeof(MyColors), (MyColors)i))
{
i++;
}
return i;
}
更新
我最终想出了这个答案:
private Int32 GetEnumCount(Type enumType)
{
Int32 i = 0;
while (Enum.IsDefined(enumType, i))
{
i++;
}
return i;
}
答案 0 :(得分:2)
作为一种替代方法(虽然显然这已经得到了解答)如果你用0开始第一个,那么在最后添加一个名为count的那个,你可以使用它,例如:
enum MyColour
{
Blue = 0,
Red,
Green,
ColourCount
}
答案 1 :(得分:1)
这可以做到,但还需要做一些额外的工作才能使它与异常枚举一起使用:
private static ulong GetEnumContiguousCount(Type enumType)
{
var underlyingType = Enum.GetUnderlyingType(enumType);
ulong i;
for (i = 0; Enum.IsDefined(enumType, Convert.ChangeType(i, underlyingType, null)); ++i) {}
return i;
}
答案 2 :(得分:0)
您应该将枚举Type
作为参数,并将转换移至(MyColors)
。
在非Sliverlight中,您也可以使用
替换您的功能Enum.GetValues(typeof(MyEnum)).Length