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

    猴赛雷。

  • 相关阅读:
    readonly const
    多线程的安全性
    【C++】operator运算符重载
    C++ 多态的实现及原理(转载)
    C语言宽字符处理函数对照表
    UTF8编码规则(转)
    PE文件结构(转)
    C语言中宏定义
    汇编语言移位指令
    数组指针应该结合二维数组多维数组来理解
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808767.html
Copyright © 2011-2022 走看看