我有一個C#方法,它從一個字符串中創建一個類的新實例,但是,運行代碼時出現錯誤。從字符串創建類實例
obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
ArgumentNullException了未處理
值不能爲空
參數名:型
此錯誤的任何幫助,將不勝感激。
我有一個C#方法,它從一個字符串中創建一個類的新實例,但是,運行代碼時出現錯誤。從字符串創建類實例
obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
ArgumentNullException了未處理
值不能爲空
參數名:型
此錯誤的任何幫助,將不勝感激。
您可能需要使用匯編限定名作爲參數Type.GetType
eg AssemblyName.Namespace.ClassName
+1:這是一個很好的猜測,可能是什麼問題。 – 2010-02-20 00:00:27
FQTN是Namespace.Class,程序集,即程序集名稱最後以逗號分隔(不在前面,以點分隔)。 – itowlson 2010-02-20 00:04:21
謝謝。我只好把'Namespace.className' – 2010-02-20 00:05:45
它看起來像你的Type.GetType("classPrefix_" + className)
電話正在返回一個null
。當傳遞給CreateInstance
方法時,這導致ArgumentNullException
。
評估"classPrefix_" + className
並檢查確實有一種類型稱爲評估對象。
使用Type.GetType方法(即全限定類型名稱,包括程序集名稱和名稱空間)時,還應該指定AssemblyQualifiedName。
你可能只是從類名
缺少的命名空間你可能沒有一種類型的「classPrefix_」加不管你對類名的。 Type.GetType()調用返回null,並且CreateInstance引發ArgumentNullException。
這是因爲Type.GetType(classHere)
沒有找到任何東西,你確定你以後的類名存在嗎?請記住,如果可能的話,它應該以一個名稱空間作爲前綴,除非它已經加載到應用程序域中,否則不會在外部程序集中找到它。
工作對我來說:
class ClassX {}
class classPrefix_x : ClassX {}
public class Program
{
public static void Main()
{
string className = "x";
ClassX obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
Console.WriteLine(obj);
}
}
結果:
classPrefix_x
您正在尋找不能定義的類。你確定你輸入正確嗎?
看起來Type.GetType("classPrefix_" + className)
被返回null。
當它找不到類型時,它返回null。有幾個可能的原因是缺少名稱空間,或者該類所在的程序集尚未加載。
關於該方法的Api文檔可能會給一些更多的內容。 http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx
那麼......班級「classPrefix _ ????」存在?如果不是,那麼Type.GetType將返回null ... – 2010-02-19 23:56:52