我在我的(巨大的).NET 4项目中遇到了一个奇怪的行为。在代码中的某些时候,我指的是一个完全合格的类型,说:如果typeof(Xyz)存在,为什么System.Type.GetType(“Xyz”)返回null?
System.Type type = typeof (Foo.Bar.Xyz);
后来,我这样做:
System.Type type = System.Type.GetType ("Foo.Bar.Xyz");
和我回去null
。我无法理解为什么会发生这种情况,因为我的类型名称是正确的,并且我已经检查了其他类型,并且他们得到了正确解决。此外,下面的LINQ查询查找类型:
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in assembly.GetTypes()
where assemblyType.FullName == typeName
select assemblyType;
System.Type type = types.FirstOrDefault();
在什么情况System.Type.GetType
可能会失败原因的任何?
我终于不得不求助于这段代码,而不是GetType
:
System.Type MyGetType(string typeName)
{
System.Type type = System.Type.GetType (typeName);
if (type == null)
{
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in assembly.GetTypes()
where assemblyType.FullName == typeName
select assemblyType;
type = types.FirstOrDefault();
}
return type;
}
非常感谢您的回复。事实上,我到目前为止解决的所有其他类型都位于相同的程序集或mscorlib中,所以我之前没有发现该错误。 – 2010-09-21 09:24:11
即使程序集具有强名称,也可以使用部分程序集信息提供'System.Type.GetType'。我已经检查过'System.Type.GetType(“Foo.Bar.Baz,MyCompany.MyAssembly”),即使“MyCompany.Assembly”具有强名称,它也能正常工作。 – 2010-09-21 09:26:00
以供将来参考,如果您想在代码高亮中使用反引号(并且您可能会;),请使用双反引号来开始和关闭引用:)。参见[这里](http://meta.stackexchange.com/q/82718/237379)。 – Noctis 2014-07-27 02:30:37