2010-02-19 208 views
4

我有一個C#方法,它從一個字符串中創建一個類的新實例,但是,運行代碼時出現錯誤。從字符串創建類實例

obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className)); 

ArgumentNullException了未處理

值不能爲空

參數名:

此錯誤的任何幫助,將不勝感激。

+0

那麼......班級「classPrefix _ ????」存在?如果不是,那麼Type.GetType將返回null ... – 2010-02-19 23:56:52

回答

5

您可能需要使用匯編限定名作爲參數Type.GetType

eg AssemblyName.Namespace.ClassName 

+1

+1:這是一個很好的猜測,可能是什麼問題。 – 2010-02-20 00:00:27

+0

FQTN是Namespace.Class,程序集,即程序集名稱最後以逗號分隔(不在前面,以點分隔)。 – itowlson 2010-02-20 00:04:21

+0

謝謝。我只好把'Namespace.className' – 2010-02-20 00:05:45

0

它看起來像你的Type.GetType("classPrefix_" + className)電話正在返回一個null。當傳遞給CreateInstance方法時,這導致ArgumentNullException

評估"classPrefix_" + className並檢查確實有一種類型稱爲評估對象。

使用Type.GetType方法(即全限定類型名稱,包括程序集名稱和名稱空間)時,還應該指定AssemblyQualifiedName

0

缺少的命名空間你可能沒有一種類型的「classPrefix_」加不管你對類名的。 Type.GetType()調用返回null,並且CreateInstance引發ArgumentNullException。

0

這是因爲Type.GetType(classHere)沒有找到任何東西,你確定你以後的類名存在嗎?請記住,如果可能的話,它應該以一個名稱空間作爲前綴,除非它已經加載到應用程序域中,否則不會在外部程序集中找到它。

1

工作對我來說:

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 

您正在尋找不能定義的類。你確定你輸入正確嗎?

0

看起來Type.GetType("classPrefix_" + className)被返回null。

當它找不到類型時,它返回null。有幾個可能的原因是缺少名稱空間,或者該類所在的程序集尚未加載。

關於該方法的Api文檔可能會給一些更多的內容。 http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx