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

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

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

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

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

//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;
        }

猴赛雷。

posted on 2015-11-11 18:17  左直拳  阅读(145)  评论(0编辑  收藏  举报

导航