c# – 从类型创建泛型变量 – 如何?或者使用带有属性{}而不是参
发布时间:2020-12-15 18:30:41 所属栏目:百科 来源:网络整理
导读:我目前正在使用Generics来制作一些动态方法,比如创建一个对象并用值填充属性. 有没有办法在不知道类型的情况下“动态”创建Generic?例如: ListString = new ListString() 是一种预先确定的方式,但是 List(object.GetType()) = new List(object.GetType()()
我目前正在使用Generics来制作一些动态方法,比如创建一个对象并用值填充属性.
有没有办法在不知道类型的情况下“动态”创建Generic?例如: List<String> = new List<String>() 是一种预先确定的方式,但是 List<(object.GetType())> = new List<(object.GetType()>() 不行……但是可以吗? 这不起作用(有类似的方法吗?) public T CreateObject<T>(Hashtable values) { // If it has parameterless constructor (I check this beforehand) T obj = (T)Activator.CreateInstance(typeof(T)); foreach (System.Reflection.PropertyInfo p in typeof(T).GetProperties()) { // Specifically this doesn't work var propertyValue = (p.PropertyType)values[p.Name]; // Should work if T2 is generic // var propertyValue = (T2)values[p.Name]; obj.GetType().GetProperty(p.Name).SetValue(obj,propertyValue,null); } } 那么,简而言之:如何在不使用泛型的情况下采用“类型”并从中创建对象?到目前为止,我只在方法中使用了泛型,但是可以在变量上使用相同的方法吗?我必须在方法之前定义Generic(T),所以我可以在“创建”它们之前对变量做同样的事情吗? …或者如何使用“Activator”创建一个带有Properties而不是Parameters的对象.就像你在这里一样: //使用参数值 Test t = new Test("Argument1",Argument2); //使用属性 Test t = new Test { Argument1 = "Hello",Argument2 = 123 }; 解决方法
您可以使用MakeGenericType:
Type openListType = typeof(List<>); Type genericListType = openListType.MakeGenericType(obj.GetType()); object instance = Activator.CreateInstance(genericListType); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- iphone – 如何为整个文件夹/文件夹禁用ARC?
- Oracle认证专家视频教程-OCP全套教程之学习笔记-RMAN备份
- cometd: dojo channel ""/cometd/meta"
- C#中计时器的简单实现方法示例
- c# – 如何将InkCanvas渲染到UWP Windows 10应用程序中的图
- clob保存为本地xml文件,修改后上传
- FMS 常常会用到 3个Call 和3个Send
- ios – 为什么Xcode 6.3 beta调试器显示Swift NSData的字节
- cocos2dx 常见的49中动作详解
- xcode – 重新加载.lldbinit而不重新加载应用程序?