Подтвердить что ты не робот

Как иметь значения перечисления с пробелами?

Как я могу добиться следующего использования перечислений в .NET? Я хотел бы иметь описания для каждого значения, которое включает пробелы.

public enum PersonGender
    {
        Unknown = 0,
        Male = 1,
        Female = 2,
        Intersex = 3,
        Indeterminate = 3,
        Non Stated = 9,
        Inadequately Described = 9
    }

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

4b9b3361

Ответ 1

Нет, это невозможно, но вы можете прикреплять атрибуты к членам enum. EnumMemberAttribute разработан специально для описанной вами цели.

public enum PersonGender
{
    Unknown = 0,
    Male = 1,
    Female = 2,
    Intersex = 3,
    Indeterminate = 3,

    [EnumMember(Value = "Not Stated")]
    NonStated = 9,

    [EnumMember(Value = "Inadequately Described")]
    InadequatelyDescribed = 9
}

Подробнее о том, как использовать EnumMemberAttribute для преобразования строк в значения enum, см. этот поток.

Ответ 2

Это легко. Создайте метод расширения для вашей строки, который возвращает форматированную строку на основе вашего соглашения о кодировании. Вы можете использовать его во многих местах, а не только здесь. Это работает для camelCase и TitleCase.

    public static String ToLabelFormat(this String s)
    {
        var newStr = Regex.Replace(s, "(?<=[A-Z])(?=[A-Z][a-z])", " ");
        newStr = Regex.Replace(newStr, "(?<=[^A-Z])(?=[A-Z])", " ");
        newStr = Regex.Replace(newStr, "(?<=[A-Za-z])(?=[^A-Za-z])", " ");

        return newStr;
    }

Ответ 3

var assembly = Assembly.LoadFrom("ResourcesLib.DLL");            
var resourceManager =
new ResourceManager("ResourcesLib.EnumDescriptions", assembly);                        

var lst = Enum.GetValues(typeof(PersonGender)).Cast<PersonGender>().ToList();
foreach (var gender in lst)
{
  Console.WriteLine(gender); // Name
  Console.WriteLine((int)gender); //Int Value
  Console.WriteLine(resourceManager.GetString(gender.ToString()));//localized Resorce
}          

Таким образом, пробелы могут находиться в локализованном ресурсе...