如何将枚举作为参数传递

本文关键字:参数传递 枚举 | 更新日期: 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