我在我的(巨大的).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