如何将枚举作为参数传递
本文关键字:参数传递 枚举 | 更新日期: 2023-09-27 18:10:19
可能重复:
在Silverlight中遍历枚举?
我想出了一个方便的小函数,它可以让我获得枚举的计数(我知道它不能正确地用于所有枚举(。我不想把枚举硬编码到函数中,这样我就必须为每个要使用它的枚举编写一个seprate函数,我想把枚举作为一个参数传入,但我很难弄清楚如何做到这一点。
这是代码:
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开始第一个,然后在最后加一个,称为count,那么你可以使用它,例如:
enum MyColour
{
Blue = 0,
Red,
Green,
ColourCount
}
这是可以做到的,但需要做一些额外的工作才能使其适用于非配偶枚举:
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;
}
演示:http://ideone.com/Serji
您应该将枚举Type
作为参数,并移除对(MyColors)
的强制转换。
在非Sliverlight中,您也可以用替换您的功能
Enum.GetValues(typeof(MyEnum)).Length