您的位置:首页 > 编程语言 > C#

C#中泛型方法结合反射

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

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

这里需要翻译为中文的字段,都是专有特殊名词,但存在有些类中对该字段定义的名称不一致。例如某类中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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息