怎么用C#的反射通过类型名字来获得类型作为泛型的T类型?

巔峰白羊 2018-05-19 09:15:47
怎么用C#的反射通过类型名字 来获得类型作为泛型的T类型?
比如说我不知道具体用什么类型做为LsitT类型参数是String
如果参数传来“User” 怎么实现List<User> datalist=new List<User> 呢
...全文
2714 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
只会CVS 2020-12-04
  • 打赏
  • 举报
回复
继续反射调用泛型方法 //泛型方法 public class LocalizationManager { public static List<ComboDataVm> TranslateEnumData<TEnum>(string name = "") where TEnum : struct, IComparable, IFormattable, IConvertible { return null; } } //--------------------------泛型方法的动态调用示例------------------- string myName="test";//泛型方法的参数 string typeName="TYPE.Serivces.Dto.MyDto";//泛型的类型FullName, Type tType=Type.GetType(typeName);//泛型类型,实际应用中,泛型的类型或FullName可通过反射动态获取 Type locType = typeof(LocalizationManager);//获取方法所在的class的类型 MethodInfo mi = locType.GetMethod("TranslateEnumData");//获取方法 MethodInfo dmi=mi.MakeGenericMethod(tType);//获取泛型方法 var comboDatas =(List<ComboDataVm>) dmi.Invoke(locType, new object[] { myName });//调用泛型方法并且传递参数name,执行方法返回的结果为object,要强制转换
只会CVS 2020-12-04
  • 打赏
  • 举报
回复
引用 8 楼 正怒月神 的回复:
??? List<T> list=new List<T>();就好啦。
看懂题,人说的是反射 不是直接指定类型
加油馒头 2019-09-19
  • 打赏
  • 举报
回复
引用 6 楼 flyingdream123 的回复:
Type userType = Type.GetType(命名空间+类名); List<userType > datalist=new List<userType >();
不行,刚试了
huzepan1987 2019-01-17
  • 打赏
  • 举报
回复
这个实现不了,不过我之前有个类似需求,就是通过类型的字符串调用泛型函数
smthgdin_020 2018-05-22
  • 打赏
  • 举报
回复
List<int> tmp = new List<int>(); var rlt = tmp.GetType().GenericTypeArguments[0]; //得到泛型参数 不过,不太明白你的需求。为什么要传一个user来new一个list<user>,意义何在?
正怒月神 2018-05-21
  • 打赏
  • 举报
回复
???
List<T> list=new List<T>();就好啦。
cheng2005 2018-05-21
  • 打赏
  • 举报
回复
引用 6 楼 flyingdream123 的回复:
Type userType = Type.GetType(命名空间+类名); List<userType > datalist=new List<userType >();
胡扯
flyingdream123 2018-05-21
  • 打赏
  • 举报
回复
Type userType = Type.GetType(命名空间+类名); List<userType > datalist=new List<userType >();
  • 打赏
  • 举报
回复
编程要按照接口(这里接口的概念包括Class对外接口,而不仅仅指 interface)来设计。如果你不知道具体类型,那么就是使用 IList。怎么可能使用泛型来实现任何东西呢? 泛型是给使用者用的。而你做一个创作者,必须知道具体的类型。
  • 打赏
  • 举报
回复
泛型是一个模板,运行时展开生成成为具体代码让 Jit 编译器去编译成最重代码。所以空洞地编程就容易造成运行时才悲催地崩溃、而在开发时看不出来。 所以泛型就好像是高利贷一样,只是让一部分在花钱时没有痛苦感,而还钱时可能痛苦异常。所以使用泛型在图方便的时候,你要知道自己的编程责任,要明知道参数的接口规范、约束之并且写道代码上,不要滥用泛型。
巔峰白羊 2018-05-19
  • 打赏
  • 举报
回复
谢谢提示,是我走死胡同了
xuzuning 2018-05-19
  • 打赏
  • 举报
回复
T 只是代码书写时的代词,运行时早已被编译器替换成了真实的类型 书写成 List<T> datalist=new List<T>(); 就可以了,并不需要管 T 是张三还是李四
大鱼> 2018-05-19
  • 打赏
  • 举报
回复
T的意思是你可以用来替换成任何类型的

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧