我想执行一系列函数IN C#。这些函数名称存储在数据库中 例如,我有这个功能:
功能1,函数2,功能3
我想要运行查询并且查询会返回,例如,Function1
&的名称。 Function2
所以问题是当我从数据库中检索它们时如何运行它们?
或者例如,如果我的函数名存储在数组中。
我想在数组索引2和4中调用函数。只需2& 4 ......他们将他们赶出来
答案 0 :(得分:3)
假设您在一个班级中拥有自己的职能,您可以执行以下操作:
class Program
{
static void Main(string[] args)
{
Console.WriteLine(RunFunction("Function1"));
}
static object RunFunction(string functionName)
{
MethodInfo[] methodInfos = typeof(CallableFunctions).GetMethods(BindingFlags.Public | BindingFlags.Instance);
var callableFunctions = new CallableFunctions();
return methodInfos.First(mi => mi.Name == functionName).Invoke(callableFunctions, null);
}
}
class CallableFunctions
{
public string Function1()
{
return "Abc";
}
public string Function2()
{
return "Def";
}
}
Method RunFunction在Callable Functions类中执行(无参数)方法并打印它的返回值
请注意,这可能是一种糟糕的编程风格。如果你没有充分的理由这样做,那就不要
注:
根据您要实现的目标,还有其他几种可能性。您可以在Sql Server中编写存储过程/ TVF,或者如果您使用的是MS-SQL,则可以为数据库创建CLR项目并将C#方法部署到SQL Server上并在那里执行它们。
或者您可以根据结果有条件地执行分支。您在这里尝试做的可能非常危险。
答案 1 :(得分:2)
试试这个:
public partial class Default2 : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
string[] arr = { "func1", "func2" };
System.Reflection.MethodInfo methodInfo = typeof(Default2).GetMethod(arr[0]);
if (methodInfo != null)
{
methodInfo.Invoke(this, null);
}
}
public void func1()
{
Response.Write("func1");
}
public void func2()
{
Response.Write("func2");
}
}
注意:
必须指定访问类型(公共,私有,受保护)。
答案 2 :(得分:0)
我可以给你一个方法来做这件事。
如果函数的名称已知且有限,则可以使用传递给函数的参数来实现切换每个函数的函数。 即这是伪代码。
FUNCTION(INT functionCode)
SWITCH(functionCode)
CASE code1:
CALL FUNCTION1
CASE code2:
CALL FUNCTION2
END
END
现在您可以解析functionCode
并根据查询结果调用此包装函数。如果需要调用多个函数,可以重复调用此包装函数。但问题是如果你需要解析FUNCTION1,FUNCTION2等参数。在这种情况下,你必须将这些参数作为一个对象捆绑,并解析它也包装到包装函数。
这是一般答案。似乎第一个答案集中在你的问题上。