在C#枚举空间(Spaces in C# Enums)

2019-06-25 17:42发布

有没有什么办法可以把空间在C#枚举常量? 我读过,你可以这样做,在VB:

Public Enum EnumWithSpaces
  ConstantWithoutSpaces
  [Constant With Spaces]
End Enum

...然后访问它是这样的:

Public Sub UsingEnumWithSpaces()

  Dim foo As EnumWithSpaces = EnumWithSpaces.[Constant With Spaces]

End Sub

这意味着对我来说,CLR能够处理空间枚举。

有没有办法在C#这样做吗?

Answer 1:

本博客文章可以帮助你:

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

从文章:

但是,枚举不能有空格在C#“你说好,我喜欢用System.ComponentModel.DescriptionAttribute一个更友好的描述添加到枚举值的例子枚举可以这样改写!:

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

请注意,我不把描述上的项目,其中ToString()该项目显示的版本就好了。



Answer 2:

CLR可以处理标识符绝对任意字符。 然而,C#限制标识符字符到CLS,其空间不是根据这些法律。 这同样适用于VB.NET,顺便说一句 - 空间使用VB6工作在方括号内,但他们没有在VB.NET。



Answer 3:

如果你正在使用Visual C#3.0或以上的工作,我认为很方便,只是延长了枚举类和使用正则表达式来插页空间让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);
        }));
    }
}

请注意,这可以让你与任何枚举上班是不添加描述每一个值。

String enumWithSpaces = MessageBoxButtons.OKCancel.ToDisplayString();


文章来源: Spaces in C# Enums