如何使用空格来枚举值?
问题描述:
如何使用.NET
中的枚举实现以下功能?我想对每个包含空格的值进行说明。如何使用空格来枚举值?
public enum PersonGender
{
Unknown = 0,
Male = 1,
Female = 2,
Intersex = 3,
Indeterminate = 3,
Non Stated = 9,
Inadequately Described = 9
}
我希望能够选择每次使用该类型的值时是否使用描述或整数。
答
没有这不可能,但您可以将属性附加到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。
答
这很简单。为您的字符串创建一个扩展方法,该方法根据您的编码约定返回格式化的字符串。你可以在很多地方使用它,而不仅仅是在这里。这个适用于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;
}
答
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
}
所以空间可以驻留在本地化资源...
可以了'DescriptionAttribute'使用吗? – CJ7 2013-03-17 07:51:17
是的,它可以。实际上,可以使用任何具有AttributeTargets.Field或AttributeTargets.All的属性类。你也可以自己写。以下是使用['DesciptionAttribute'](http://tinyurl.com/clqr3ht)和[自定义属性](http://tinyurl.com/cyd2b6q)的示例。 – 2013-03-17 15:15:24
+1非常清楚。但我有个问题。我得到'EnumMember'的类型或命名空间名称找不到......'它如何包含在一个项目中?在Google搜索之后,我找到了3个结果,没有一个能够解决问题。 – demongolem 2013-09-25 15:31:40