20

您可以将标准的 c# 枚举作为参数传递吗?

例如:

enum e1
{
    //...
}

enum e2
{
    //...
}

public void test()
{
    myFunc( e1 );
    myFunc( e2 );
}

public void myFunc( Enum e )
{
    // Iterate through all the values in e
}

通过这样做,我希望检索任何给定枚举中的所有名称。迭代代码会是什么样子?

4

7 回答 7

30

这!

        public void Foo(Enum e)
        {
            var names = Enum.GetNames(e.GetType());

            foreach (var name in names)
            {
                // do something!
            }
        }   

编辑:我的错,你确实iterate

注意:我知道我可以在我的 foreach 语句中调用 GetNames(),但我更喜欢先将这种类型的东西分配给方法调用,因为它便于调试。

于 2009-01-29T15:44:29.240 回答
3

使用 Enum.GetNames( typeof(e) ) 方法,这将返回带有名称的字符串数组。

您还可以使用 Enum.GetValues 来获取对应值。

编辑 -Whoops - 如果您将参数作为 Enum 传递,则需要使用 e.GetType() 而不是 typeof() ,如果您将参数作为实际 Enum 类型名称传递,您将使用它。

于 2009-01-29T15:43:23.313 回答
3

你的意思是像 Enum.GetNames 这样的东西?

于 2009-01-29T15:43:45.857 回答
3

枚举.GetValues 枚举.GetNames

所以像...

foreach(e1 value in Enum.GetValues(typeof(e1)))
于 2009-01-29T15:44:39.163 回答
3

如果您尝试将一个enum直接传递给,您将遇到麻烦myFunc,如下例所示:

enum e1 {something, other};
myFunc(e1);  // Syntax error: "e1 is a type, but is being used like a variable"
于 2012-11-07T18:23:02.623 回答
2

像这样:

    public void myFunc(Enum e)
    {
        foreach (var name in Enum.GetNames(typeof(e)))
        {
            Console.WriteLine(name);
        }
    }
于 2009-01-29T15:46:04.823 回答
1

正确的是:

public void myFunc(Enum e)
{
    foreach (var name in Enum.GetNames(e.GetTye()))
    {
        Console.WriteLine(name);
    }
}
于 2009-06-19T12:51:20.557 回答