【C#】泛型方法结合反射的妙用

反射是一种动态加载程序集中所定义类型的过程,当然也包括它自身所在的程序集。这里继续沿用上篇文章的例子,总结在泛型方法中结合反射思想,从而优化代码。

上篇文章处理了通过返回的中文枚举结果,翻译为对应中文的方式,从而便于最后展示为英文。由于只有一个后台,而该后台又是中文,客户端又是英文,所以这里在提交之前,还需要将对象中的英文字段,翻译为中文之后,通过调用后台接口入库,否则校验通不过调用将失败。

这里需要翻译为中文的字段,都是专有特殊名词,但存在有些类中对该字段定义的名称不一致。例如某类中corp代表公司名称,在另一个类中com代表公司名称,考虑到后台已使用一段时间,不能牵一发而动全身。而其结构和意义一致,因而用动态处理属性来解决。加上跟上一篇中的情况类似,这里要转换的是不同实体类中该属性,所以也用到了泛型,于是,便用到了泛型结合反射。大致如下:

        /// <summary>
        /// 对象属性英文转为中文
        /// </summary>
        /// <typeparam name="T1">对象的类型</typeparam>
        /// <param name="value">对象参数</param>
        /// <param name="property">要转换的属性名称</param>
        /// <returns></returns>
        public static T1 ChineseToEnglish<T1>(T1 value, string property)
        {
            //value对象中没有该属性则直接返回
            if(value.GetType().GetProperty(property).GetValue(value,null) == null)
            {
                return value;
            }
            //通过属性的中文值,设置其为英文值
            switch (value.GetType().GetProperty(property).GetValue(value, null).ToString()) 
            {
                case "Lenovo":
                    value.GetType().GetProperty(property).SetValue(value, "联想", null);
                    break;
                case "ALi Corporation":
                    value.GetType().GetProperty(property).SetValue(value, "阿里扬智科技", null);
                    break;
                case "Tencent":
                    value.GetType().GetProperty(property).SetValue(value, "腾讯", null);
                    break;;
                case "Trade surplus":
                    value.GetType().GetProperty(property).SetValue(value, "贸易顺差", null);
                    break;
            }
            return value;
        }

调用方式就变成了类似如下:

ChineseToEnglishConvert.ChineseToEnglish(VendorsInfo, "corp");
ChineseToEnglishConvert.ChineseToEnglish(VendorsInfo, "com");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值