如何将字符串值传递给表达式?

时间:2013-05-10 11:51:49

标签: c#

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表达式?

3 个答案:

答案 0 :(得分:5)

您可以使用Type.GetType

Type.GetType(className);

你必须提供完整的班级名称。如果在另一个程序集中定义了类,则还需要指定该程序集名称的名称。

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

如果是嵌套类,您可以使用+

指定其名称
Type.GetType("Name.Space.ClassName+NestedClassName, OtherAssemblyName");

答案 1 :(得分:0)

简短的回答:你不能。

typeof采用类型,而不是包含类型名称的字符串。要从字符串中获取类型,可以将Type.GetType与字符串参数一起使用。

答案 2 :(得分:0)

根据您对其他答案的评论。

如果你的论点是“SomeClass.SomeMethod”

然后你想使用Type.GetType("SomeClass")但为了工作你需要命名空间,如Adil所提到的

然后你使用

myType.GetMethod("SomeMethod");

然后你可以创建它的一个实例并调用该方法。 您可以使用Activator.CreateInstance

缩短几步

Get a new object instance from a type