繁体   English   中英

C#枚举中的空格

[英]Spaces in C# Enums

有没有办法在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#中做到这一点?

这篇博文可能对您有所帮助:

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()版本显示正常的项目进行描述。

CLR可以处理标识符中的任何字符。 但是,C#将标识符字符限制为CLS下的合法字符,而空间不是。 顺便说一下,VB.NET也是如此 - 方括号中的空格曾经用于VB6,但它们不适用于VB.NET。

如果您正在使用Visual C#3.0或更高版本,我发现只需扩展枚举类并使用正则表达式插入必要的空格:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM