标题有点模糊.我想知道的是,如果可能的话:
string typeName =; Type myType = Type.GetType(typeName); MyGenericClass myGenericClass = new MyGenericClass ();
显然,MyGenericClass被描述为:
public class MyGenericClass
现在,编译器抱怨'找不到类型或命名空间'myType'."必须有办法做到这一点.
没有反思,你不能这样做.但是,你可以用反射来做.这是一个完整的例子:
using System; using System.Reflection; public class Generic{ public Generic() { Console.WriteLine("T={0}", typeof(T)); } } class Test { static void Main() { string typeName = "System.String"; Type typeArgument = Type.GetType(typeName); Type genericClass = typeof(Generic<>); // MakeGenericType is badly named Type constructedClass = genericClass.MakeGenericType(typeArgument); object created = Activator.CreateInstance(constructedClass); } }
注意:如果您的泛型类接受多种类型,则在省略类型名称时必须包含逗号,例如:
Type genericClass = typeof(IReadOnlyDictionary<,>); Type constructedClass = genericClass.MakeGenericType(typeArgument1, typeArgument2);
不幸的是没有.通用参数必须在编译时可解析为1)有效类型或2)另一个通用参数.如果没有使用反射的大麻烦,就无法基于运行时值创建泛型实例.