Подтвердить что ты не робот

С# перечисления как параметры функции?

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

Например:

enum e1
{
    //...
}

enum e2
{
    //...
}

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

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

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

4b9b3361

Ответ 1

Это

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Enum.GetValues Enum.GetNames

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

foreach(e1 value in Enum.GetValues(typeof(e1)))

Ответ 5

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

enum e1 {something, other};
myFunc(e1);  // Syntax error: "e1 is a type, but is being used like a variable"

Ответ 6

Вот так:

    public void myFunc(Enum e)
    {
        foreach (var name in Enum.GetNames(typeof(e)))
        {
            Console.WriteLine(name);
        }
    }

Ответ 7

правильный:

public void myFunc(Enum e)
{
    foreach (var name in Enum.GetNames(e.GetTye()))
    {
        Console.WriteLine(name);
    }
}