C# では、より高次の関数を作成することができます。関数g
を引数として取る関数。f
関数を指定し、その機能を拡張する別の関数を返すような関数を作成したいとします。返された拡張メソッドの引数名を定義するにはどうすればよいですか? 動機は、私が一般的に高次のメソッドを扱っていることであり、その中には新しいメソッドを生成するものもあります..そして、これらにはパラメーター名などが付けられていないため、使用が難しい場合があります。
g
C# でおよびf
それぞれを定義する方法を示す例:
T
を引数として取り、 を返すメソッドを拡張できるメソッド Extend を定義しますS
。
static class M
{
public static Func< T, S> Extend(Func< T, S> functionToWrap)
{
return (someT) =>
{
...
var result = functionToWrap(someT);
...
return result;
};
}
}
その後、メソッドを変更せずにクラスのメソッドを拡張できます。
class Calc2
{
public Func< int, int> Calc;
public Calc2()
{
Calc = M.Extend< int, int>(CalcPriv);
}
private int CalcPriv(int positiveNumber)
{
if(positiveNumber < 0) throw new Exception(...);
Console.WriteLine("calc " + i);
return i++;
}
}
残念ながら、利用可能な情報は のみであるため、引数名positiveNumber
は利用できなくなりましたFunc<int, int> Calc
。それは、入力して拡張メソッドを使用するときですnew Calc2().Calc(-1)
。実際、私の引数が間違っているという IDE からの助けは得られません。
a を定義してこれにキャストできればいいのですdelegate
が、これは不可能です。
助言がありますか?