如何传递Enum作为参数

时间:2011-10-02 15:58:16

标签: c# silverlight enums

  

可能重复:
  Iterating through an enumeration in Silverlight?

我想出了一个方便的小函数,让我得到了一个枚举的计数(我知道它将无法正常使用所有枚举)。而不是将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;
    }

3 个答案:

答案 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;
}

演示:http://ideone.com/Serji

答案 2 :(得分:0)

您应该将枚举Type作为参数,并将转换移至(MyColors)

在非Sliverlight中,您也可以使用

替换您的功能
Enum.GetValues(typeof(MyEnum)).Length