Как иметь значения перечисления с пробелами?
Как я могу добиться следующего использования перечислений в .NET
? Я хотел бы иметь описания для каждого значения, которое включает пробелы.
public enum PersonGender
{
Unknown = 0,
Male = 1,
Female = 2,
Intersex = 3,
Indeterminate = 3,
Non Stated = 9,
Inadequately Described = 9
}
Я хотел бы иметь возможность выбирать, использовать ли описание или целое число каждый раз, когда я использую значение этого типа.
Ответы
Ответ 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
}
Таким образом, пробелы могут находиться в локализованном ресурсе...