Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
.net 反射和泛型类型导致null_.net_Reflection - Fatal编程技术网

.net 反射和泛型类型导致null

.net 反射和泛型类型导致null,.net,reflection,.net,Reflection,我需要通过反射获取IPProcessor的类型对象,根据文档,我需要执行以下操作: Type.GetType("IProcessor`1[System.Int32]") 但是,它返回null。然后我试着: Type.GetType(typeof(IProcessor<int>).FullName) Type.GetType(typeof(IProcessor.FullName) 仍然得到一个空值 但是,我能够通过以下方式获取类型参数: Type.GetType(typeof(I

我需要通过反射获取IPProcessor的类型对象,根据文档,我需要执行以下操作:

Type.GetType("IProcessor`1[System.Int32]")
但是,它返回null。然后我试着:

Type.GetType(typeof(IProcessor<int>).FullName)
Type.GetType(typeof(IProcessor.FullName)
仍然得到一个空值

但是,我能够通过以下方式获取类型参数:

Type.GetType(typeof(IProcessor<int>).AssemblyQualifiedName)
Type.GetType(typeof(IPProcessor).AssemblyQualifiedName)
但不幸的是,我没有版本,文化或公钥可在呼叫网站。关于如何获取类型对象有什么建议吗

编辑:下面提到的错误更正
编辑:在代码中使用typeof运算符不是一个选项。我需要从字符串中获取类型对象运行时

typeof操作符需要一个类型名称,并直接返回类型对象。因此,如果您可以在代码中引用类型,那么您只需使用

typeof(IProcessor<int>)
typeof(i处理器)
或者,对于开放泛型版本,您可以使用反射构造封闭类型

typeof(IProcessor<>)
typeof(i处理器)

typeof操作符需要一个类型名,并直接返回类型对象。因此,如果您可以在代码中引用类型,那么您只需使用

typeof(IProcessor<int>)
typeof(i处理器)
或者,对于开放泛型版本,您可以使用反射构造封闭类型

typeof(IProcessor<>)
typeof(i处理器)

由于问题中的示例中存在语法错误,因此您必须更加小心地转录所询问的代码;“FullName”和“AssemblyQualifiedName”需要在括号外,而不是直接在类型上

因此,我假设你的意思是:

Type.GetType("IProcessor`1[System.Int32]");
(注意
i处理器
1
之间的反勾号,这非常重要)

至少要使此语法起作用,您必须包含类型所在的完整命名空间,因此,例如,如果
IProcessor
位于命名空间
MyApp.Interfaces
中,则代码应为:

Type.GetType("MyApp.Interfaces.IProcessor`1[System.Int32]");
但是请注意,这仅在您引用的类型位于从中进行此调用的同一程序集中时有效。如果不是,那么至少您必须将程序集名称添加到调用中,就像这样(假设它位于名为
MyAssembly
的程序集中):


由于问题中的示例有语法错误,因此您必须更加小心地转录您正在询问的代码;“FullName”和“AssemblyQualifiedName”需要在括号外,而不是直接在类型上

因此,我假设你的意思是:

Type.GetType("IProcessor`1[System.Int32]");
(注意
i处理器
1
之间的反勾号,这非常重要)

至少要使此语法起作用,您必须包含类型所在的完整命名空间,因此,例如,如果
IProcessor
位于命名空间
MyApp.Interfaces
中,则代码应为:

Type.GetType("MyApp.Interfaces.IProcessor`1[System.Int32]");
但是请注意,这仅在您引用的类型位于从中进行此调用的同一程序集中时有效。如果不是,那么至少您必须将程序集名称添加到调用中,就像这样(假设它位于名为
MyAssembly
的程序集中):


您可以发布文档的链接吗?您需要发布IPProcessor的代码,FullName有一些奇怪的地方,我不明白。如果它是一个属性或方法,它将不会编译,并且您不能嵌套接口。。。基本上,发布一个简短但完整的程序,该程序将编译并展示您描述的问题。正如(现在)在下面指出的,它应该是typeof(IProcessor).FullName和typeof(IProcessor).AssemblyQualifiedName和字符串版本缺少一个back-plingCan您可以发布一个到文档的链接吗?您需要发布IProcessor的代码,FullName有一些奇怪的地方我不明白。如果它是一个属性或方法,它将不会编译,并且您不能嵌套接口。。。基本上,发布一个简短但完整的程序,该程序将编译并展示您描述的问题。正如(现在)在下面所指出的,它应该是typeof(IPProcessor).FullName和typeof(IPProcessor).AssemblyQualifiedName和字符串版本遗漏了一个关于语法错误的备份,我的错。我必须尝试包含程序集名称。但是,如果程序集是泛型类型,则必须包含该程序集的名称,这让我觉得很奇怪。代码对于非泛型类型工作良好,仅使用FullName注意,当我在应用程序中测试时,没有程序集名称的第二个变体工作良好;这只是因为命名空间和类发生在我从中进行GetType调用的同一程序集中。如果您要解析的类型与GetType调用不在同一程序集中,那么您将需要一个程序集名称,否则您将不知道泛型和非泛型之间的区别,它不必位于同一名称空间/程序集中,但需要加载程序集持有的名称才能使其工作我不确定“泛型和非泛型之间的差异”是什么意思。。。保存类型的程序集需要加载这一事实并不奇怪。。。尽管看到完全引用时的强命名程序集是否自动加载很有趣(我猜可能不是这样,但至少在技术上是可能的)。我必须尝试包含程序集名称。但是,如果程序集是泛型类型,则必须包含该程序集的名称,这让我觉得很奇怪。代码对于非泛型类型工作良好,仅使用FullName注意,当我在应用程序中测试时,没有程序集名称的第二个变体工作良好;这只是因为命名空间和类发生在我从中进行GetType调用的同一程序集中。如果类型是yo