用枚举做字典

本文介绍了一种在软件开发项目中使用枚举类型替代数据库存储字典的方法。通过枚举来映射固定的选项集合,可以简化维护流程并提高前后端数据交互效率。

  我们一般项目中,都是把字典存到数据库中的。几个月前在做一个政府的项目中,觉得其实一些字典是跟开发工程紧密结合在一起的,也就是说字典变了,工程肯定也要变,这样子的字典如果也存到数据库中的话,也是多增加一些麻烦而已,后来但将这些字典写成枚举。然后数据库里面取的所谓的字典的key就是枚举的name,如:"unsubmited",而前台页面显示的,就是枚举的一个属性text,不过这里用到了webwork里面的ognl语法。

/**
 * Author: Wingel
 * Date: 2006-7-29
 * Time: 15:17:52
 
*/

public enum ApplicationState {
    unsubmited(
"未提交"),submited("提交/待审批"),agreed("通过"),disagreed("未同意");
    
private String text;

    ApplicationState(String text) 
{
        
this.text = text;
    }


    
public static String getText(String name) {//给页面用的方法
        try {
            
return valueOf(name).text;
        }
 catch (Exception e) {
            
return null;
        }

    }


    
public String getText() {
        
return text;
    }


    
public static boolean isValidRegisterType(String name) {
        
try {
            valueOf(name);
            
return true;
        }
 catch (Exception e) {
            
return false;
        }

    }


    
public static ApplicationState[] allState() {
        
return ApplicationState.values();
    }


    
public String getName() {
        
return this.name();
    }

}



 
在C#中,实现枚举和字符串的字典映射有多种方法,以下是几种常见的实现方式: ### 使用 `Dictionary<EnumType, string>` 和 `Dictionary<string, EnumType>` 手动创建映射 ```csharp using System; using System.Collections.Generic; // 定义一个枚举 public enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } class Program { static void Main() { // 从枚举到字符串的映射 Dictionary<WeekDays, string> enumToStringMap = new Dictionary<WeekDays, string> { { WeekDays.Monday, "星期一" }, { WeekDays.Tuesday, "星期二" }, { WeekDays.Wednesday, "星期三" }, { WeekDays.Thursday, "星期四" }, { WeekDays.Friday, "星期五" }, { WeekDays.Saturday, "星期六" }, { WeekDays.Sunday, "星期日" } }; // 从字符串到枚举的映射 Dictionary<string, WeekDays> stringToEnumMap = new Dictionary<string, WeekDays>(); foreach (var pair in enumToStringMap) { stringToEnumMap[pair.Value] = pair.Key; } // 使用枚举获取对应的字符串 WeekDays day = WeekDays.Monday; string dayName = enumToStringMap[day]; Console.WriteLine($"枚举 {day} 对应的字符串是: {dayName}"); // 使用字符串获取对应的枚举 string inputDayName = "星期二"; WeekDays inputDay = stringToEnumMap[inputDayName]; Console.WriteLine($"字符串 {inputDayName} 对应的枚举是: {inputDay}"); } } ``` ### 使用 `DescriptionAttribute` 自动映射 ```csharp using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; // 定义一个枚举 public enum WeekDays { [Description("星期一")] Monday, [Description("星期二")] Tuesday, [Description("星期三")] Wednesday, [Description("星期四")] Thursday, [Description("星期五")] Friday, [Description("星期六")] Saturday, [Description("星期日")] Sunday } class Program { // 获取枚举的描述信息 static string GetEnumDescription(Enum value) { FieldInfo field = value.GetType().GetField(value.ToString()); DescriptionAttribute attribute = field.GetCustomAttribute<DescriptionAttribute>(); return attribute != null ? attribute.Description : value.ToString(); } // 创建从枚举到字符串的映射 static Dictionary<Enum, string> CreateEnumToStringMap(Type enumType) { Dictionary<Enum, string> map = new Dictionary<Enum, string>(); foreach (Enum value in Enum.GetValues(enumType)) { map[value] = GetEnumDescription(value); } return map; } // 创建从字符串到枚举的映射 static Dictionary<string, Enum> CreateStringToEnumMap(Type enumType) { Dictionary<string, Enum> map = new Dictionary<string, Enum>(); foreach (Enum value in Enum.GetValues(enumType)) { string description = GetEnumDescription(value); map[description] = value; } return map; } static void Main() { // 创建映射 Dictionary<Enum, string> enumToStringMap = CreateEnumToStringMap(typeof(WeekDays)); Dictionary<string, Enum> stringToEnumMap = CreateStringToEnumMap(typeof(WeekDays)); // 使用枚举获取对应的字符串 WeekDays day = WeekDays.Monday; string dayName = enumToStringMap[day]; Console.WriteLine($"枚举 {day} 对应的字符串是: {dayName}"); // 使用字符串获取对应的枚举 string inputDayName = "星期二"; WeekDays inputDay = (WeekDays)stringToEnumMap[inputDayName]; Console.WriteLine($"字符串 {inputDayName} 对应的枚举是: {inputDay}"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值