Перечисления C # в качестве параметров функции? - PullRequest
18 голосов
/ 29 января 2009

Можете ли вы передать стандартное перечисление c # в качестве параметра?

Например:

enum e1
{
    //...
}

enum e2
{
    //...
}

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

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

Делая это, я надеюсь получить все имена в любом заданном перечислении. Как будет выглядеть код итерации?

Ответы [ 7 ]

27 голосов
/ 29 января 2009

это!

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

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

РЕДАКТИРОВАТЬ: мой плохой, вы сделал сказать повторить .

Примечание: я знаю, что мог бы просто выполнить вызов GetNames () в своем операторе foreach, но я предпочитаю сначала назначать этот тип вещи вызову метода, поскольку это удобно для отладки.

3 голосов
/ 07 ноября 2012

У вас будут проблемы, если вы попытаетесь передать enum напрямую myFunc, как в следующем примере:

enum e1 {something, other};
myFunc(e1);  // Syntax error: "e1 is a type, but is being used like a variable"
3 голосов
/ 29 января 2009

Enum.GetValues Enum.GetNames

так что-то вроде ...

foreach(e1 value in Enum.GetValues(typeof(e1)))
3 голосов
/ 29 января 2009

Вы имеете в виду что-то вроде Enum.GetNames?

3 голосов
/ 29 января 2009

Используйте метод Enum.GetNames (typeof (e)), он вернет массив строк с именами.

Вы также можете использовать Enum.GetValues ​​для получения значений аналога.

Edit -Whoops - если вы передаете параметр как Enum, вам нужно будет использовать e.GetType () вместо typeof (), который вы использовали бы, если бы передали параметр в качестве фактического имени типа Enum. 1005 *

2 голосов
/ 29 января 2009

Как это:

    public void myFunc(Enum e)
    {
        foreach (var name in Enum.GetNames(typeof(e)))
        {
            Console.WriteLine(name);
        }
    }
1 голос
/ 19 июня 2009

правильное значение:

public void myFunc(Enum e)
{
    foreach (var name in Enum.GetNames(e.GetTye()))
    {
        Console.WriteLine(name);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...