我需要通过反射获取IProcessor的类型对象,并根据文档我需要执行以下操作:
Type.GetType("IProcessor`1[System.Int32]")
但是,返回null。然后我尝试了:
Type.GetType(typeof(IProcessor<int>).FullName)
仍然有空。
但是,我能够通过以下方式获取Type参数:
Type.GetType(typeof(IProcessor<int>).AssemblyQualifiedName)
但遗憾的是,我在呼叫网站上没有版本,文化或公钥。有关如何获取类型对象的任何建议吗?
编辑:下面提到的拼写错误 编辑:在代码中使用typeof运算符不是一个选项。我需要从字符串
获取类型对象运行时答案 0 :(得分:5)
由于您的问题中的示例中存在语法错误,因此您需要对要求的代码的转录更加谨慎。 “FullName”和“AssemblyQualifiedName”需要在括号外,而不是直接在类型上。
因此,我认为你的意思是:
Type.GetType("IProcessor`1[System.Int32]");
(请注意IProcessor
和1
之间的反复,这非常重要)
至少要使用此语法,您必须包含该类型所在的完整命名空间,因此,如果IProcessor
位于命名空间MyApp.Interfaces
中,则代码应为:
Type.GetType("MyApp.Interfaces.IProcessor`1[System.Int32]");
但请注意,这仅适用于您所引用的类型位于您进行此调用的同一程序集中。如果不是,那么至少你将不得不为调用添加程序集名称(假设它位于名为MyAssembly
的程序集中):
Type.GetType("MyApp.Interfaces.IProcessor`1[System.Int32], MyAssembly");
答案 1 :(得分:1)
typeof运算符需要类型名称,并直接返回Type对象。因此,如果您可以在代码中引用类型,那么只需使用
来获取类型typeof(IProcessor<int>)
或者,对于开放的通用版本,您可以使用反射
构造一个封闭类型typeof(IProcessor<>)