如何使用.NET
中的枚举来实现以下功能?我想对每个包含空格的值进行描述。
public enum PersonGender
{
Unknown = 0,
Male = 1,
Female = 2,
Intersex = 3,
Indeterminate = 3,
Non Stated = 9,
Inadequately Described = 9
}
我希望每次使用此类型的值时都能选择是使用描述还是整数。
答案 0 :(得分:40)
不,这是不可能的,但您可以将属性附加到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
值的详细信息,请参阅this thread。
答案 1 :(得分:5)
这很容易。为您的字符串创建一个扩展方法,该方法根据您的编码约定返回格式化字符串。你可以在很多地方使用它,而不仅仅是在这里。这个适用于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;
}
答案 2 :(得分:1)
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
}
因此空间可能存在于本地化资源中......