gpt4 book ai didi

c# - 当需要更多功能时,枚举是否应该重构为一个类?

转载 作者:太空狗 更新时间:2023-10-30 00:42:38 25 4
gpt4 key购买 nike

此时我有以下代码。

internal enum Genders
{
Male,
Female,
NotSure,
Other
}

我正在考虑添加一个额外的功能,以便我可以foreach所有值返回一个基于此的String。所以,我会按如下方式进行映射。

Male    -> "boy"
Female -> "girl"
NotSure -> "oh-boy"
Other -> "cow"

我应该将 enum 重构为一个类,还是建议将 ToString 值分配给不同的 enum 状态?我用谷歌搜索了它,但没有看到它的任何代码示例,所以我不确定这样做是否可取。

也许创建一个辅助类并使用这样的方法会更好?

private IEnumerable<String> GetGenders()
{
yield return "boy";
yield return "girl";
yield return "oh-boy";
yield return "cow";
}

还是我只是把自己弄糊涂了,应该立即停止?

最佳答案

改为考虑向枚举添加扩展。

例如,您可以这样做:

Gender.Male.Description (which would return string "boy")

扩展看起来像这样:

    /// <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;
}

你的枚举看起来像这样:

public enum Gender
{
[Description("boy")]
Male,

[Description("girl")]
Female,

[Description("oh-boy")]
NotSure,

[Description("cow")]
Other
}

关于c# - 当需要更多功能时,枚举是否应该重构为一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14435382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com