此时我有以下代码.
internal enum Genders
{
Male,
Female,
NotSure,
Other
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑添加一个额外的功能,以便我可以预先处理所有值并根据它返回一个字符串.所以,我会按如下方式进行映射.
Male -> "boy"
Female -> "girl"
NotSure -> "oh-boy"
Other -> "cow"
Run Code Online (Sandbox Code Playgroud)
我应该将枚举重构为类还是建议将ToString值分配给不同的枚举状态?我用Google搜索了它,但没有看到任何代码示例,所以我不确定这样做是否明智.
也许最好创建一个辅助类并使用这样的方法?
private IEnumerable<String> GetGenders()
{
yield return "boy";
yield return "girl";
yield return "oh-boy";
yield return "cow";
}
Run Code Online (Sandbox Code Playgroud)
或者我只是困惑自己,应该立即停止?
请考虑为Enum添加扩展名.
例如,您可以这样做:
Gender.Male.Description (which would return string "boy")
Run Code Online (Sandbox Code Playgroud)
扩展名如下所示:
/// <summary>
/// Defines an EnumExtensions type.
/// </summary>
public static class EnumExtensions
{
/// <summary>
/// Gets the value from a DescriptionAttribute applied to the enum.
/// </summary>
/// <param name="value">Enum value.</param>
/// <returns>DescriptionAttribute value, or null if no attribute is applied.</returns>
public static string Description(this Enum value)
{
var type = value.GetType();
var fieldInfo = type.GetField(value.ToString(CultureInfo.InvariantCulture));
var descriptionAttributes = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
return descriptionAttributes.Length > 0
? ((DescriptionAttribute)descriptionAttributes[0]).Description
: null;
}
Run Code Online (Sandbox Code Playgroud)
你的枚举看起来像这样:
public enum Gender
{
[Description("boy")]
Male,
[Description("girl")]
Female,
[Description("oh-boy")]
NotSure,
[Description("cow")]
Other
}
Run Code Online (Sandbox Code Playgroud)