2013-05-10 57 views
0
public void Invoke(string methodname) 
{ 
    string funcname=methodname.Split('.')[1]; 

    //funcname contains the value of CustomerController 
    Type type = typeof(funcname); 

    MethodInfo method = type.GetMethod(funcname); 
    CustomerController c = new CustomerController(); 
    string result = (string)method.Invoke(c, null); 
} 

在這我需要傳遞一個字符串值到typeof表達式這是一個類名。但是我得到一個編譯時錯誤。在上面的代碼中如何將字符串值傳遞給一種表達式?

Type type = typeof(funcname); 

這裏funcname包含值"CustomerController"。如果我用下面的線代替它,它工作正常。

Type type = typeof(CustomerController); 

如何將字符串值傳遞給typeof表達式?

+0

你正在調用CustomerController'的'的方法,所以它應該是'typeof運算(CustomerController)'。 – I4V 2013-05-10 11:55:47

回答

5

您可以使用Type.GetType

Type.GetType(className); 

你有充分的類名。如果在另一個程序集中定義了類,則還需要指定該程序集名稱的名稱。

Type.GetType("Name.Space.ClassName"); 
Type.GetType("Name.Space.ClassName, OtherAssemblyName"); 

如果它是一個嵌套類,你可以用+

Type.GetType("Name.Space.ClassName+NestedClassName, OtherAssemblyName"); 
+0

我得到空。 – user1357872 2013-05-10 12:00:56

+0

你是怎麼使用它的?你的班級名字和名字空間是什麼? – 2013-05-10 12:01:54

+0

我試過這樣。 methoname =「UserController.AddUser」; Type type = Type.GetType(methoname); – user1357872 2013-05-10 12:14:42

0

簡短的回答指定其名稱:不能。

typeof需要一個類型,而不是包含類型名稱的字符串。要從字符串中獲取類型,可以使用帶有字符串參數的Type.GetType

0

從您對其他答案的意見。

如果你的論點是「SomeClass.SomeMethod」

然後你想使用Type.GetType("SomeClass")但是對於工作,你需要的命名空間,由阿迪爾

提及然後使用

myType.GetMethod("SomeMethod"); 

然後你可以創建一個實例並調用該方法。 你可能會削減走出幾步與Activator.CreateInstance

Get a new object instance from a type

相關問題