views:

392

answers:

5

Possible Duplicate:
Enum with strings

is is possible to have string constants in enum like

      enum{name1="hmmm" name2="bdidwe"}

if it is not so what is best way to do so?

I tried it its not working for string so right now i am grouping all related constnats in one class like

      class operation
      {
          public const string  name1="hmmm";
          public const string  name2="bdidwe"
      }
A: 

In C# 3.0, you can't do it

Ngu Soon Hui
A: 

Your operation class won't compile as is... you didn't declare the type of name1 and name2...

But that is the approach I'd take... yes.

If you make it a struct then it becomes a value type which may or may not be what you wanted...

John Weldon
i forgot type it here otherwise its fine.i am just concerned about the right approach to keep string constants.
Maddy.Shik
Yes, I'd do something along those lines too probably.
John Weldon
+1  A: 

The whole point of enums is to be ordinal constants.
However, you can achieve what you want by using an extension method:

  enum Operation
  {
      name1,
      name2
  }

  static class OperationTextExtender
  {
        public static String AsText(this Operation operation)
        {
              switch(operation)
              {
                    case Operation.name1: return "hmmm";
                    case Operation.name2: return "bdidwe";
                    ...
              }
        }
  }

  ...
  var test1 = Operation.name1;
  var test2 = test1.AsText();
Robert Giesecke
I really wonder if you would ever use a one-off extension method like this in real-world code ? (there's no sarcasm intended in that question). It is interesting to know this could be done.
BillW
I have a snippet that creates extension classes with a Contains and Remove method for flag enums. I don't want it to be part of the public API, so it is internal. But I use it fairly frequently and for built-in flags as well, particularly "Contains".
Robert Giesecke
+4  A: 

You could do this using DescriptionAttribute, but then you'd have to write code to get the string out of the attribute.

public enum YourEnum
{
    [Description("YourName1")]
    Name1,

    [Description("YourName2")]
    Name2
}
Taylor Leese
+1 First time coming across Description attribute. Thanks :)
Senthil
How to get string out of attribute?
Maddy.Shik
+1 the only answer yet that has taken the position that the OP's intent is to have something that has the full range of possibilities of an Enum type.
BillW
There's a number of examples if you google "enum descriptionattribute". Here's one: http://weblogs.asp.net/grantbarrington/archive/2009/01/19/enumhelper-getting-a-friendly-description-from-an-enum.aspx
Taylor Leese
+2  A: 

Enum constants can only be of ordinal types (int by default), so you can't have string constants in enums.

When I want something like a "string-based enum" I create a class to hold the constants like you did, except I make it a static class to prevent both unwanted instantiation and unwanted subclassing.

But if you don't want to use string as the type in method signatures and you prefer a safer, more restrictive type (like Operation), you can use the safe enum pattern:

public sealed class Operation
{
    public static readonly Name1 = new Operation("Name1");
    public static readonly Name2 = new Operation("Name2");

    private Operation(string value)
    {
        Value = value;
    }

    public string Value { get; private set; }
}
Martinho Fernandes
This one seems really awesome.thanks
Maddy.Shik