在C#中将枚举与字符串关联起来

9 浏览
0 Comments

在C#中将枚举与字符串关联起来

我知道以下是不可能的,因为Enumeration的类型必须是int

enum GroupTypes
{
    TheGroup = "OEM",
    TheOtherGroup = "CMB"
}

从我的数据库中获取一个包含难懂代码(OEMCMB)的字段。我希望将此字段转换为可理解的enum或其他东西。因为如果目标是可读性,则解决方案应该是简洁明了的。

我还有哪些选项?

admin 更改状态以发布 2023年5月24日
0
0 Comments

你也可以使用扩展模型:\n

public enum MyEnum
{
    [Description("String 1")]
    V1= 1,
    [Description("String 2")]
    V2= 2
} 

\n你的扩展类\n

public static class MyEnumExtensions
{
    public static string ToDescriptionString(this MyEnum val)
    {
        DescriptionAttribute[] attributes = (DescriptionAttribute[])val
           .GetType()
           .GetField(val.ToString())
           .GetCustomAttributes(typeof(DescriptionAttribute), false);
        return attributes.Length > 0 ? attributes[0].Description : string.Empty;
    }
} 

\n用法:\n

MyEnum myLocal = MyEnum.V1;
print(myLocal.ToDescriptionString());

0
0 Comments

我倾向于在类中使用属性而不是方法,因为它们看起来更像枚举。

以下是 Logger 的示例:

public class LogCategory
{
    private LogCategory(string value) { Value = value; }
    public string Value { get; private set; }
    public static LogCategory Trace   { get { return new LogCategory("Trace"); } }
    public static LogCategory Debug   { get { return new LogCategory("Debug"); } }
    public static LogCategory Info    { get { return new LogCategory("Info"); } }
    public static LogCategory Warning { get { return new LogCategory("Warning"); } }
    public static LogCategory Error   { get { return new LogCategory("Error"); } }
    public override string ToString()
    {
        return Value;
    }
}

类型安全的字符串值作为参数传递:

public static void Write(string message, LogCategory logCategory)
{
    var log = new LogEntry { Message = message };
    Logger.Write(log, logCategory.Value);
}

用法:

Logger.Write("This is almost like an enum.", LogCategory.Info);

0