Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将枚举作为参数传递_C#_Silverlight_Enums - Fatal编程技术网

C# 如何将枚举作为参数传递

C# 如何将枚举作为参数传递,c#,silverlight,enums,C#,Silverlight,Enums,可能重复: 我想出了一个方便的小函数,它可以让我得到一个枚举的计数(我知道它不能正确地处理所有的枚举)。与其将枚举硬编码到函数中,这样我就必须为每个要使用它的枚举编写一个seprate函数,我想将枚举作为参数传入,但我很难弄清楚如何做到这一点 代码如下: private enum MyColors { Red, Green, Blue } private Int32 GetEnumCount() { Int32 i = 0; while

可能重复:

我想出了一个方便的小函数,它可以让我得到一个枚举的计数(我知道它不能正确地处理所有的枚举)。与其将枚举硬编码到函数中,这样我就必须为每个要使用它的枚举编写一个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;
    }

您应该将enum
类型
作为参数,并删除对
(MyColors)
的强制转换

在非Sliverlight中,您也可以将函数替换为

Enum.GetValues(typeof(MyEnum)).Length

这是可以做到的,但是需要做一些额外的工作才能使它与非常用枚举一起工作:

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;
}
演示:

作为替代方案(尽管这显然已经得到了回答),如果您以0开始第一个,然后在末尾添加一个名为count的,那么您可以使用它,例如:

enum MyColour
{
     Blue = 0,
     Red,
     Green,
     ColourCount
}

-1用于在编辑中复制我的答案@诺尔多林:我在你之前写了这个答案,在看到你的答案之前我写了编辑。不,当我发布我的答案时,你没有写,你的
Enum.GetValues
位不包括在内。30秒后我刷新了,结果是。您甚至调用了完全相同的枚举类型……请注意Silverlight标记。Silverlight中没有针对Enum的getValues。-9999您都复制了Enum.getValues()上的文档。真丢脸!!!顺便说一句,该页面上第二高的答案是我推荐的答案。这种方法只适用于枚举值连续的情况。
标志
属性化枚举通常在使用的整数中有间隙,因此此方法将失败。也许您可以解释一下为什么需要它?这是一个需要记住的有用的+1:需要处理不同的底层类型是有意义的,但是返回
ulong
不需要,
int
就可以了,而且会更容易使用。@AnthonyWJones:您可能是对的,但我没有同时查找枚举的最大成员数。