当请求更多功能时,是否应该将枚举重构为类?

4 c# class-structure

此时我有以下代码.

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)

或者我只是困惑自己,应该立即停止?

Ama*_*ein 5

请考虑为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)