C#-如何获取';使用泛型参数';在运行时?
我有一个泛型类,如下所示:C#-如何获取';使用泛型参数';在运行时?,c#,C#,我有一个泛型类,如下所示: using System.Collections.Generic; namespace MyNameSpace { public class MyClass<T> : MyAnotherClass { public MyClass(); public MyClass(T obj); public T Object { get; set; } } } 将Assembly.GetTyp
using System.Collections.Generic;
namespace MyNameSpace
{
public class MyClass<T> : MyAnotherClass
{
public MyClass();
public MyClass(T obj);
public T Object { get; set; }
}
}
将Assembly.GetType(className)与泛型类一起使用是否非法
您能推荐任何替代方法来获取运行时中泛型类的类型吗
如果这个问题太基本,请提前感谢并道歉。我是c#的新手
编辑:
忘了提了。包含MyClass的程序集将在运行时加载。我认为您必须在运行时使用CLR命名来访问泛型类型:
AssemblyContaingMyClass.GetType("MyNameSpace.MyClass`1");
在CLR中,泛型的命名没有提到类型参数,但后面有一个反勾(`
),后跟泛型类型参数的数量。try(不带T):
Type template=typeof(MyNameSpace.MyClass);
这就是你想要的吗
public class MyClass<T>
{
public T TheGeneric { get; set; }
}
Type theType = typeof(MyClass<>);
公共类MyClass
{
公共T泛型{get;set;}
}
Type theType=typeof(MyClass);
您不能这样做的原因是,简单地说,没有名为MyClass
的类。有一个通用的类定义,它的名称类似于MyClass`1
,还有每个类型的变体,它的名称类似于MyClass`1[System.String]
等等
获取类型的最简单方法是使用typeof
关键字,如下所示:
var genericType = typeof(MyClass<>);
var specificType = typeof(MyClass<string>);
当谈到泛型类型的命名时,它是
ClassName`
试试MyNameSpace.MyClass
我做了。还尝试了MyNameSpace.MyClass+1。检查也不难,类型的全名(来自同一程序集)可以通过typeof(MyNameSpace.MyClass).FullName
提取。就我所记得的,其他程序集在AssemblyName+NameSpace.ClassName`3
(对于3个泛型参数)+1的行中有全名。它的工作就像魔术!!!非常感谢:)顺便说一句,在调试器中它说我的类名是“MyClass`1”。这是正常的还是有错误?@someone\u smiley-是的,这很正常。希望我能再投票一次,谢谢你@Damien\u The\u unsiveri不能:包含我的类的程序集将在运行时加载。
public class MyClass<T>
{
public T TheGeneric { get; set; }
}
Type theType = typeof(MyClass<>);
var genericType = typeof(MyClass<>);
var specificType = typeof(MyClass<string>);
var genericType = assembly.GetType("MyClass`1");
var specificType = assembly.GetType("MyClass`1[System.String]");