以下代码怎么样使用委托减少switch case,达到便于维护,高可扩展的目的

.Net技术 码拜 4年前 (2016-09-24) 655次浏览
        /// <summary>
        /// Redis缓存机制(适用于静态数据)
        /// </summary>
        /// <param name="context"></param>
        /// <param name="t">类名</param>
        /// <param name="mth">方法名</param>
        /// <param name="key">设置Redis中的键名</param>
        /// <param name="ts">设置参数类型</param>
        /// <param name="o">设置参数名称</param>
        /// <param name="type">设置数据库类型</param>
        public void RedisCache(HttpContext context, Type t, string mth, string key, Type[] ts, object[] o, DataBaseType type)
        {
            string json = String.Empty;
            if (RedisBase.Item_Exist(key))//判断Redis中,key能否存在;若存在,直接从redis取值,不存在则执行数据库访问方法,这种机制减缓了数据库的压力,提升了系统性能.
            {
                json = RedisBase.GetValue(key);//根据key获取value
            }
            else
            {
                object className = Activator.CreateInstance(t);//反射方法
                MethodInfo mInfo = null;
                object obj = null;
                if (ts != null && o != null)//执行带有多种参数的方法
                {
                    mInfo = t.GetMethod(mth, ts);
                    obj = mInfo.Invoke(className, o);
                }
                else//执行无参数的方法
                {
                    mInfo = t.GetMethod(mth);
                    obj = mInfo.Invoke(className, null);
                }
                switch (type)//根据数据库类型处理字符串,因富基融通建库时使用的是西欧字符集.
                {
                    case DataBaseType.Oracle:
                        json = Convert8859P1ToGB2312(JsonConvert.SerializeObject(obj));
                        break;
                    case DataBaseType.SQL_Server:
                        json = JsonConvert.SerializeObject(obj);
                        break;
                }
                RedisBase.Item_Set<string>(key, json, 120);//根据key设置value
            }
            context.Response.Write(json);
            context.Response.End();
        }
        
        public delegate string JsonHandler<T>(T t);//本人定义了委托,就不知道怎么样使用了
        public string SendJson_SQL<T>(T t)
        {
            return JsonConvert.SerializeObject(t);
        }
        public string SendJson_Ora<T>(T t)
        {
            return Convert8859P1ToGB2312(JsonConvert.SerializeObject(t));
        }
解决方案

40

Func<string> jsonFunc
//改为
Func<object,string> jsonFunc
//然后方法传递
jsonFunc(obj);
(obj) =>
    {
        return Convert8859P1ToGB2312(JsonConvert.SerializeObject(obj));
    });

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明以下代码怎么样使用委托减少switch case,达到便于维护,高可扩展的目的
喜欢 (0)
[1034331897@qq.com]
分享 (0)