Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-如何获取';使用泛型参数';在运行时?_C# - Fatal编程技术网

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]");