zoukankan      html  css  js  c++  java
  • 泛型方法的局限及解决之道

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

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

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

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

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

    猴赛雷。

  • 相关阅读:
    1015,存储过程,视图
    1009,数据库查询,聚合函数,日期时间函数
    1008,数据库表格创建,名称,格式

    公历和农历转换的JS代码
    面向对象之封装
    HTML之锚点
    HTML之css+div
    HTML基础
    SQL之定义变量
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808767.html
Copyright © 2011-2022 走看看