Spaces in C# Enums

后端 未结 3 1340
轮回少年
轮回少年 2020-12-08 16:21

Is there any way to put spaces in a C# enum constant? I\'ve read that you can do it in VB by doing this:

Public Enum EnumWithSpaces
  ConstantWithoutSpaces
         


        
相关标签:
3条回答
  • 2020-12-08 16:56

    This blog post might help you:

    http://blog.spontaneouspublicity.com/2008/01/17/associating-strings-with-enums-in-c/

    From the article:

    But enums can't have spaces in C#!" you say. Well, I like to use the System.ComponentModel.DescriptionAttribute to add a more friendly description to the enum values. The example enum can be rewritten like this:

    public enum States
    {
        California,
        [Description("New Mexico")]
        NewMexico,
        [Description("New York")]
        NewYork,
        [Description("South Carolina")]
        SouthCarolina,
        Tennessee,
        Washington
    }
    

    Notice that I do not put descriptions on items where the ToString() version of that item displays just fine.

    0 讨论(0)
  • 2020-12-08 17:08

    If you're working with Visual C# 3.0 or above I've found it convenient to just extend the enum class and use a regex to inset spaces where neccessary:

    public static class EnumExtension
    {
        public static String ToDisplayString(this Enum e)
        {
            Regex regex = new Regex(@"([^\^])([A-Z][a-z$])");
    
            return regex.Replace(e.ToString(), new MatchEvaluator(m =>
            {
                return String.Format("{0} {1}", m.Groups[1].Value, m.Groups[2].Value);
            }));
        }
    }
    

    Notice this allows you to work with any enum as is without adding descriptions to every value.

    String enumWithSpaces = MessageBoxButtons.OKCancel.ToDisplayString();
    
    0 讨论(0)
  • 2020-12-08 17:11

    CLR can handle absolutely any character in identifiers. However, C# restricts the identifier characters to those legal under the CLS, which space isn't. Same goes for VB.NET, by the way - spaces inside square brackets used to work in VB6, but they don't in VB.NET.

    0 讨论(0)
提交回复
热议问题