Пробелы в C # Enums - PullRequest
       16

Пробелы в C # Enums

15 голосов
/ 13 июля 2009

Есть ли способ поместить пробелы в константу перечисления 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 #?

Ответы [ 3 ]

36 голосов
/ 13 июля 2009

Этот пост может помочь вам:

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

Из статьи:

Но перечисления не могут иметь пробелов в C #! " ты говоришь. Ну, я люблю использовать System.ComponentModel.DescriptionAttribute добавить более дружелюбное описание значения перечисления. Пример enum может переписать так:

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

Обратите внимание, что я не помещаю описания предметов, в которых версия ToString() этого предмета отображается нормально.

9 голосов
/ 13 июля 2009

CLR может обрабатывать абсолютно любые символы в идентификаторах. Однако C # ограничивает символы идентификатора теми, которые разрешены в соответствии с CLS, а пробел - нет. Кстати, то же самое относится и к VB.NET - пробелы внутри квадратных скобок раньше работали в VB6, но не в VB.NET.

0 голосов
/ 25 августа 2013

Если вы работаете с Visual C # 3.0 или выше, я считаю удобным просто расширить класс enum и использовать регулярное выражение для вставки пробелов, где это необходимо:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...