JamesBrownIsDead
JamesBrownIsDead

Reputation: 95

C#: Get Enum Name as String

Let's say I have this class:

public class SiteMapEntry  
{
    public static enum ChangeFrequency
    {
        Always,
        Hourly,
        Daily,
        Weekly,
        Monthly,
        Yearly,
        Never
    }
}

And this function:

public class FooBar(SiteMapEntry.ChangeFrequency changeFreq)
{

}

Which is called:

string foobarNever = FooBar(SiteMapEntry.ChangeFrequency.Never);

What do I need to do in the method FooBar to have the string foobarNever == "never"?

Upvotes: 8

Views: 8705

Answers (5)

Kabayan
Kabayan

Reputation: 21

You may heard that enum.toString() has performance issue, so better to use nameof(enum.x), e.g nameof(ChangeFrequency.Always) will return "Always"

https://www.youtube.com/watch?v=BoE5Y6Xkm6w&t=51s

Upvotes: 1

Eric Brown
Eric Brown

Reputation: 11

Replace Your_ENUM_List in the code example with your ENUM and run this code.

string Result = "";

Type Enum_Name= typeof(  Your_ENUM_List  );

int Enum_Number = 0;

Result = Enum.ToObject(Enum_Name, Enum_Number).ToString();

Upvotes: 1

Tejs
Tejs

Reputation: 41236

There are multiple ways of interacting with enums. For best practice, always compare an enum with the defined type:

if(changeFreq == ChangeFrequency.Never)

not

if(changeFreq.ToString() == "Never")

as it is more descriptive. If you need to convert a string value to the enum type, then use

try
{
    convertedValue = (ChangeFrequency)Enum.Parse(typeof(ChangeFrequency), stringValue);
}
catch
{
    convertedValue = ChangeFrequency.Always; // Whatever default you want
}

Upvotes: 1

C Bauer
C Bauer

Reputation: 5103

string foobarNever = "never" :)

Alternatively, why aren't you just doing:

if(FooBar(SiteMapEntry.ChangeFrequency.Never) == SiteMapEntry.ChangeFrequency.Never)
{}

Upvotes: 1

Stewart
Stewart

Reputation: 4028

changeFreq.ToString() will give you a string representation of the enum value.

Upvotes: 23

Related Questions