TK.
TK.

Reputation: 47883

C# enums as function parameters?

Can you pass a standard c# enum as a parameter?

For example:

enum e1
{
    //...
}

enum e2
{
    //...
}

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

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

By doing this I hope to retrieve all the names within any given enum. What would the Iteration code look like?

Upvotes: 21

Views: 49974

Answers (7)

gg89
gg89

Reputation: 380

You will have trouble if you try passing an enum directly to myFunc, as in the following example:

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

Upvotes: 3

bgruen
bgruen

Reputation:

correct is:

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

Upvotes: 1

bruno conde
bruno conde

Reputation: 48265

Like this:

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

Upvotes: 2

Luke
Luke

Reputation: 3017

Enum.GetValues Enum.GetNames

so something like...

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

Upvotes: 3

Daniel Schaffer
Daniel Schaffer

Reputation: 57852

This!

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

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

EDIT: My bad, you did say iterate.

Note: I know I could just do the GetNames() call in my foreach statement, but I prefer to assign that type of thing to a method call first, as it's handy for debugging.

Upvotes: 30

ctacke
ctacke

Reputation: 67178

You mean something like Enum.GetNames?

Upvotes: 3

pezi_pink_squirrel
pezi_pink_squirrel

Reputation: 774

Use the Enum.GetNames( typeof(e) ) method, this will return an array of strings with the names.

You can also use Enum.GetValues to obtain the counterpart values.

Edit -Whoops - if you are passing the parameter as Enum, you will need to use e.GetType() instead of typeof() which you would use if you had passed the parameter in as the actual Enum type name.

Upvotes: 3

Related Questions