在C#中将枚举与字符串关联起来
在C#中将枚举与字符串关联起来
我知道以下是不可能的,因为Enumeration的类型必须是int
enum GroupTypes { TheGroup = "OEM", TheOtherGroup = "CMB" }
从我的数据库中获取一个包含难懂代码(OEM
和CMB
)的字段。我希望将此字段转换为可理解的enum
或其他东西。因为如果目标是可读性,则解决方案应该是简洁明了的。
我还有哪些选项?
admin 更改状态以发布 2023年5月24日
你也可以使用扩展模型:\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());
我倾向于在类中使用属性而不是方法,因为它们看起来更像枚举。
以下是 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);