Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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#_Generics_Reflections - Fatal编程技术网

C#反射:如何获取泛型对象的类型

C#反射:如何获取泛型对象的类型,c#,generics,reflections,C#,Generics,Reflections,假设我有下面的课程 公共类MyClass { 公共方法(T输入) { //使用输入执行逻辑 } } 我想将MyClass类型存储在如下值中 Type classType=typeof(MyClass); 但是由于MyClass是一个泛型类,我不能在不声明一个泛型的情况下执行该操作,比如typeof(MyClass) 有没有办法让这一切顺利进行 我写了这样的东西 private void PerformLogic(输入类型) { MethodInfo getTypeMethod=typeof(

假设我有下面的课程

公共类MyClass
{
公共方法(T输入)
{
//使用输入执行逻辑
}
}
我想将MyClass类型存储在如下值中

Type classType=typeof(MyClass);
但是由于MyClass是一个泛型类,我不能在不声明一个泛型的情况下执行该操作,比如
typeof(MyClass)

有没有办法让这一切顺利进行

我写了这样的东西

private void PerformLogic(输入类型)
{
MethodInfo getTypeMethod=typeof(this).GetMethod(“GetType”);
getTypeMethod=getTypeMethod.MakeGenericMethod(inputType);
类型结果=(类型)getTypeMethod.Invoke(默认值,默认值);
// ...
}
私有静态类型GetType()
T:在哪里上课
{
类型=类型(MyClass);
返回类型;
}
但我觉得有一种更干净的方法可以做到这一点,而不必创建一个带有“0引用”的额外方法。

在“使用输入执行逻辑”中,您可以这样写:

  • typeof(T)
    检查类型参数的类型信息
    T
  • typeof(MyClass)
    MyClass
    类型作为泛型类型定义进行检查
  • typeof(MyClass)
    检查
    MyClass
    的封闭泛型类型

如果您已经有一个封闭构造类型的
类型
实例,并且想知道开放泛型类型是什么,那么它可能会很有帮助。您所说的“MyClass类型”是指类型参数“T”吗?或者你是说构造的泛型类型“MyClass”?这真的很有帮助。这就是我需要的
Type closedType=typeof(MyClass)
对于
GetGenericTypeDefinition
方法,您可能还希望保持手头的状态。