C#使用存储在DB中的方法名称调用方法

时间:2014-08-22 10:38:47

标签: c# methods enums

我有几种方法之一(策略1,策略2),...需要根据传入的ID调用。

是否可以在db中保存方法名称并使用存储的名称调用该方法?

目前我已将StrategyID保存为枚举,并使用在ID中传递的switch语句匹配相应的策略枚举。我不喜欢这个解决方案,因为你需要让enum与Strategies db表保持同步。

我想要做的是将开关从前端取出并放入数据库中。所以基本上我可以进行db调用(FetchStrategiesToRun)并返回相应的Strategies列表,我可以循环调用它们直接调用方法。

如果是这样,怎么做。如果是这样,有什么理由我不想这样做吗?

2 个答案:

答案 0 :(得分:3)

这似乎与Dynamically invoking any function by passing function name as string

类似
// All error checking omitted. In particular, check the results
// of Type.GetType, and make sure you call it with a fully qualified
// type name, including the assembly if it's not in mscorlib or
// the current assembly. The method has to be a public instance
// method with no parameters. (Use BindingFlags with GetMethod
// to change this.)
public void Invoke(string typeName, string methodName)
{
    Type type = Type.GetType(typeName);
    object instance = Activator.CreateInstance(type);
    MethodInfo method = type.GetMethod(methodName);
    method.Invoke(instance, null);
}

public void Invoke<T>(string methodName) where T : new()
{
    T instance = new T();
    MethodInfo method = typeof(T).GetMethod(methodName);
    method.Invoke(instance, null);
}

此处有更多信息,使用System.Reflection;

http://www.dotnetperls.com/getmethod

using System;
using System.Reflection;

static class Methods
{
    public static void Inform(string parameter)
    {
    Console.WriteLine("Inform:parameter={0}", parameter);
    }
}

class Program
{
    static void Main()
    {
    // Name of the method we want to call.
    string name = "Inform";

    // Call it with each of these parameters.
    string[] parameters = { "Sam", "Perls" };

    // Get MethodInfo.
    Type type = typeof(Methods);
    MethodInfo info = type.GetMethod(name);

    // Loop over parameters.
    foreach (string parameter in parameters)
    {
        info.Invoke(null, new object[] { parameter });
    }
    }
}

答案 1 :(得分:0)

您可以使用反射按名称调用方法。 下面的链接中提供了如何执行此操作的示例 click here