Использование специального символа в Enum, например % (C # 3.0) - PullRequest
3 голосов
/ 17 августа 2010

У меня есть комбо, источником которого является Enum.Теперь среди других значений (скажем, value1, value2

и т.enum?

Использование C # 3.0

Спасибо

Ответы [ 4 ]

8 голосов
/ 17 августа 2010

Вы не можете.Имена значений перечисления должны быть действительными идентификаторами C #.Вы не должны пытаться поместить отображаемые имена там.

Вместо этого рассмотрите возможность украшения каждого значения атрибутом [Description], который вы можете получить с отражением:

public enum ChangeType
{
    [Description("Changes (%)")]
    PercentageChanges,

    [Description("Changes (absolute)")]
    AbsoluteChanges
}

В качестве альтернативы определите ресурсы, возможно, используя имя значения enum в качестве ключа ресурса.Это будет лучше для целей i18n, помимо всего прочего, хотя больше работы, если вам не нужно, чтобы ваше приложение было интернационализировано.

РЕДАКТИРОВАТЬ: Вот статья, в которой более подробно .

0 голосов
/ 05 сентября 2013

Я использую подход Джона (атрибут Description против перечислений) вместе с методом расширения, показанным ниже, чтобы было удобно получить описание:

public static class EnumExtensions
{
  public static T GetAttribute<T>(this Enum enumerationValue) where T : Attribute
  {
    T[] attributes = GetAttributes<T>(enumerationValue);
    return attributes.Length > 0 ? attributes[0] : null;
  }

  public static string GetDescription(this Enum enumerationValue, string descriptionIfNull = "")
  {
    if (enumerationValue != null)
    {
      DescriptionAttribute attribute = enumerationValue.GetAttribute<DescriptionAttribute>();
      return attribute != null ? attribute.Description : enumerationValue.ToString();
    }
    return descriptionIfNull;
  }
}

Пример использования:

[TestClass]
public class WhenGettingDescriptionOfAnEnum
{
  private enum SampleEnum
  {
    First,
    [Description("description")]
    Second
  }

  [TestMethod]
  public void ShouldReturnNameOfEnumIfItHasNoDescription()
  {
    SampleEnum.First.GetDescription().Should().Be("First");
  }

  [TestMethod]
  public void ShouldReturnDescriptionIfThereIsOne()
  {
    SampleEnum.Second.GetDescription().Should().Be("description");
  }
}
0 голосов
/ 18 августа 2010

FWIW ... в этой статье подробно рассматривается точная методология достижения того, что предлагает Джон Скит >>>> ... Извлечение описаний перечисления из файла ресурсов

0 голосов
/ 17 августа 2010

Перечисления C # компилируются как закрытые классы, унаследованные от Enum, с открытыми статическими полями, несущими имена ваших членов перечисления, таким образом, вы просите компилятор назвать поля такими вещами, как "<", ">" и "= ", и это не принято.

Значения перечисления несут те же ограничения, что и свойства и поля, когда дело доходит до именования.

...