1

C#で一連の関数を実行したい。これらの関数名はデータベースに保存されますたとえば、私はこの関数を持っています:

関数 1、関数 2、関数 3

クエリを実行したいクエリは、たとえば、Function1&の名前を返しますFunction2

問題は、データベースからそれらを取得するときにどのように実行できるかです。

または、たとえば、関数名が配列に格納されている場合。

配列インデックス 2 と 4 で関数を呼び出したいのですが、2 と 4 だけ...そして、それらはそれらを実行します

4

3 に答える 3

3

関数が 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 に展開してそこで実行できます。
または、結果に基づいて条件付きで分岐を実行することもできます。ここでやろうとしていることは、潜在的に非常に危険です。

于 2013-09-13T17:05:23.650 に答える