/// <summary> /// 获取资源文件--根据资源文件键的名字,取出对应的值 /// </summary> /// <param>ResourceCode</param> /// <returns></returns> public static string GetResourceString(string ResourceCode) { return SysConfig.ResourceManager.GetString(ResourceCode); }
这样就可以读取资源文件了
如上述提出的程序通用的问题,Lable控件的Text属性如何设置值?如何达到在中国能运行,在美国能运行,在火星能运行?
在此:你可以把在中国的取值放在一个资源文件中,在美国的取值放在另一个资源文件中,在火星上的取值放在火星文对应的资源文件中,也就是说:在项目中在新建你需要的资源文件,例如:Sys_Config_China资源文件中存储的是中文,在Sys_Config_US资源文件中存储的是英文,在Sys_Config_Marks资源文件中存放火星文。但要注意一点,他们存储的键值对中的‘剑’必须一致,否则将做不到通用性!
这样,一个项目在各个国家就可以做到通用了!
当然,要想做到程序真正的通用,仅靠资源文件是不行的,您写程序的水平也是至关重要滴,举个简单例子哈:
时间戳都用吧,时间戳转化为时间怎么转换?时间戳的格式有几种?
当一个方法传入一个时间戳,让您转化为时间,您打算怎么做?怎样写通用的程序?
在此,您首先要知道时间戳分为: linux 时间戳 和 unix时间戳两种,在您进行转化之前,您至少要判断传入的时间戳属于哪一种,然后再调用对应的方法进行转换!
当然,本篇主要讲解资源文件的枚举的结合使用,在此,关于时间戳的话题先放放。
首先先贴点代码哈
/// <summary> /// test /// </summary> public enum shopInfo { shopName, shopAddress, shopTel, } public enum NoticeType { Notice = ‘A‘, LabRule = ‘H‘, HotInformation = ‘N‘, Column = ‘C‘, All = ‘1‘, Null = ‘0‘ }
上述代码,大家都知道,这是C#的枚举,那您接着往下看哈
/// <summary> /// 将枚举值存入资源文件 /// </summary> public enum weixinParm { [EnumCode("apisecret")]//对应资源文件中的Key值 方便遍历时寻找 apisecret, [EnumCode("appid")] appid, [EnumCode("appsecret")] appsecret, [EnumCode("duokefu")] duokefu, [EnumCode("mchid")] mchid, [EnumCode("orderSuccessid")] orderSuccessid , [EnumCode("paySuccessid")] paySuccessid }
吆喝,,这个EnumCode是什么东西呐?怎嘛感觉这个东西有点像MVC中的那个啥呢、
其实吧,这个EnumCode是个类,这类可以将C#资源文件和枚举整合,如下:
/// <summary> /// 枚举的资源名称描述- /// </summary> [AttributeUsage(AttributeTargets.Field)] public class EnumCode : Attribute { private string _code; private FieldInfo _fieldInfo; public EnumCode(string code) { _code = code; } public string FieldCode { get { return _code; } } public int FieldValue { get { return (int)_fieldInfo.GetValue(null); } } public string FieldName { get { return _fieldInfo.Name; } } static Dictionary<string, List<EnumCode>> _cached = new Dictionary<string, List<EnumCode>>(); public static string GetFieldCode(object enumValue) { List<EnumCode> codes = GetEnumCode(enumValue.GetType()); foreach (EnumCode code in codes) { if (code.FieldName == enumValue.ToString()) { return code.FieldCode; } } return string.Empty; } public static List<EnumCode> GetEnumCode(Type enumType) { List<EnumCode> result = null; if (!_cached.ContainsKey(enumType.FullName)) { result = new List<EnumCode>(); FieldInfo[] fields = enumType.GetFields(); foreach (FieldInfo field in fields) { object[] objs = field.GetCustomAttributes(typeof(EnumCode), false); if (objs.Length != 1) { continue; } ((EnumCode)objs[0])._fieldInfo = field; result.Add((EnumCode)objs[0]); } _cached[enumType.FullName] = result; } result = _cached[enumType.FullName]; return result; } }
至此:根据上述这个类,我们就可以结合枚举和资源文件了,
下面是我做的测试代码,贴给大家,有遍历枚举的,有取枚举节点的,更有遍历枚举和资源文件结合的,总之,无所不能