2

私はプロジェクトに取り組んでおり、立ち往生しています:(.... getM1()、getM2()、getM3()、getM4()....getM5(という名前の9つの関数があります。 ) そして、これらの関数はすべて値を返します。

次に、これらの関数の値をチェックするループを作成する必要があります。このようなもの:

public void show()
{
    for (int i = 1; i <= 9; i++)
    {
        if (obj.getM[i]() == 1)
        {
          .......;
        }
    }
}

もちろん、getM にはインデックスが含まれていないため、エラーが表示されます。または、すべての getM() 関数をチェックする方法を別の方法で考えている人はいますか?

4

6 に答える 6

3

デリゲートの配列を作成し、Func<int>それを使用してメソッドにアクセスします。

var functions = new Func<int>[9];
functions[0] = getM1;
functions[1] = getM2;
functions[2] = getM3;
// (...)

for (int i = 0; i <= 9; i++)
{
    if (functions[i]() == 1)
    {
        ;
    }
}
于 2013-04-09T17:47:49.240 に答える
1

関数を配列に入れるのはどうですか:

var functionList = new [] { obj.getM1, obj.getM2, ... };

そして、それをループします

foreach (var f in functionList)
{
    if (f() == 1) 
    ...
}
于 2013-04-09T17:48:37.650 に答える
1

メソッドを次のように置き換えます。

int getM(int index)

これと提案された他の解決策が本当に意味をなさない場合は、リフレクションを使用して必要なことを行うことができます。

var t = obj.GetType();
for (int i = 1; i <= 9; i++)
{
    var m = t.GetMethod("getM" + i);
    int result = (int)m.Invoke(obj, null);
}
于 2013-04-09T17:48:49.993 に答える
1

の配列を作成します。Func<T>ここで、Tは関数の戻り値の型です。次に、コードで記述した方法で関数を多かれ少なかれ呼び出すことができます。

たとえば、関数が を返す場合int、次のようにできます。

Func<int>[] ems = new Func<int>[] {
    () => obj.getM1(), () => obj.getM2(), () => obj.getM3()
,   () => obj.getM4(), () => obj.getM5(), () => obj.getM6()
,   () => obj.getM7(), () => obj.getM8(), () => obj.getM9()
};
foreach (Func<int> em in ems)
{
    if (em() == 1)
    {
      .......;
    }
}
于 2013-04-09T17:48:58.557 に答える
0

これらのメソッドをすべてリストに格納し、リストをループして実行することができます。

var funcList = new List<Func<int>>{ getM1, getM2, ... };

次に、リストをループして各メソッドを実行できます。

foreach(var func in funList)
{
    if(func() == 1)
        ...
}
于 2013-04-09T17:49:44.553 に答える