您的位置:首页 > 其它

泛型方法的局限及解决之道

2015-11-11 18:17 197 查看
泛型的优点在于提高了函数的适应性,有利于代码复用。但是,一个支持泛型的方法里面,代表该参数类型未可知,如果要直接使用它的属性,是不行的。因此,这点是泛型的局限,使得这个泛型参数,乃至整个方法,便利性都打了折扣。

由此可知,在支持泛型的方法里面,泛型对象作为参数,主要作用在不同的方法间传来传去,像踢皮球似的。仅此而已。

难道真的不能访问泛型对象的属性吗?

“可以用反射”,西蒙说。

//propertyName,待访问的属性名
string getProperty<T>(IList<T> listDB, string propertyName)
{
string val = "";

if (listDB.Count == 0) return val;

//通过反射获得泛型对象的属性数组
PropertyInfo[] propertys = listDB[0].GetType().GetProperties();
int p = 0;
foreach (PropertyInfo pi in propertys)
{
if (pi.Name.Equals(propertyName, comparisonType: StringComparison.CurrentCultureIgnoreCase))
{//找到propertyName在T属性数组中的下标p
break;
}
p++;
}
if (p == propertys.Length)
{
throw new Exception("对象没有相应的属性:" + propertyName);
}

foreach (var m in listDB)
{
//如此,可访问T的属性矣
val += propertys[p].GetValue(m).ToString() + ",";
...
}

return val;
}


猴赛雷。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: