C#で一連の関数を実行したい。これらの関数名はデータベースに保存されますたとえば、私はこの関数を持っています:
関数 1、関数 2、関数 3
クエリを実行したいクエリは、たとえば、Function1
&の名前を返しますFunction2
問題は、データベースからそれらを取得するときにどのように実行できるかです。
または、たとえば、関数名が配列に格納されている場合。
配列インデックス 2 と 4 で関数を呼び出したいのですが、2 と 4 だけ...そして、それらはそれらを実行します
関数が 1 つのクラスにあると仮定すると、次のことができます。
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";
}
}
メソッド RunFunction は、クラス Callable Functions の (パラメーターなしの) メソッドを実行し、その戻り値を出力します。
これは悪いプログラミング スタイルである可能性があることに注意してください。これを行う本当に正当な理由がない場合は、しないでください。
注意:
達成しようとしていることに応じて、他にもいくつかの可能性があります。SQL Server にストアド プロシージャ/TVF を記述できます。または、MS-SQL を使用している場合は、データベース用の CLR プロジェクトを作成し、C# メソッドを SQL Server に展開してそこで実行できます。
または、結果に基づいて条件付きで分岐を実行することもできます。ここでやろうとしていることは、潜在的に非常に危険です。