在 Net Framework 中引入了范型(Generic)的概念 这可以说是一个重大的改进它的好处我在这里也不用多说 到网上可以找到非常多的说明 我在这里要和大家说的是怎么通过反射使用范型的技术 一 首先看看范型的FullName List<string> list = new List<string>(); System Console WriteLine(list GetType() FullName); System Console WriteLine(); 这个语句得到的是: System Collections Generic List` [[System String mscorlib Version= Culture=neutral PublicKeyToken=b a c e ]] 好长呀!分析一下其中的格式会看出一下几个东东 System Collections Generic List > 说明该Type是什么类型的 > 应该是范型的标志 System String mscorlib Version= Culture=neutral PublicKeyToken=b a c e >是string类型的FullName 那么在看看这个语句会出现什么? Dictionary<string int> dic = new Dictionary<string int>(); System Console WriteLine(dic GetType() FullName); System Console WriteLine(); 结果是: System Collections Generic Dictionary` [[System String mscorlib Version= Culture=neutral PublicKeyToken=b a c e ] [System Int mscorlib Version= Culture=neutral PublicKeyToken=b a c e ]] 更长 分析一下: System Collections Generic Dictionary > 说明该Type是什么类型的 > 还是是范型的标志 System String mscorlib Version= Culture=neutral PublicKeyToken=b a c e >是string类型的FullName System Int mscorlib Version= Culture=neutral PublicKeyToken=b a c e >是int类型的FullName 从上面的例子可以看出范型的类型和 时增加了两个部分 分别是范型的标识部分和范型的参数类型FullName部分 首先看一下标志部分 ` 和` 猜测`标识了该类型是范型 后面的数字部分是说明了该范型需要几个范型参数 现在还是猜测 下面根据猜测来应用我们自己的反射试验一下吧! 二 范型反射的试验 看看下面的代码: string tlistStr = System Collections Generic List` [System String] ; Type tList = Type GetType(tlistStr); Object olist = System Activator CreateInstance(tList); MethodInfo addMList = tList GetMethod( Add ); addMList Invoke(olist new object[] { zhx }); Console WriteLine(olist ToString()); System Console WriteLine(); string tDicStr = System Collections Generic Dictionary` [[System String] [System Int ]] ; Type tDic = Type GetType(tDicStr); Object oDic = Activator CreateInstance(tDic); MethodInfo addMDic = tDic GetMethod( Add ); addMDic Invoke(oDic new object[] { zhx }); Console WriteLine(oDic ToString()); System Console WriteLine(); 测试通过 不过大家要注意了 范型中的基础类型如:string int不能使用简写的 如果把System Collections Generic List` [System String] 写成 System Collections Generic List` [string]是不能够得到正确类型的
lishixinzhi/Article/program/ASP/201311/21760