2013-05-10 38 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

相关问题