この質問に対する答えを調べていると、「匿名メソッド内で出力パラメーターが許可されないのはなぜですか?」 ラムダ式と匿名メソッドが実際にどのように機能するかについて少し迷っています。
コメントの中で、JaredPar は、「たとえば、out パラメータがスタック上のローカル変数を参照していると想像してください。ラムダは将来の任意の時点で実行できるため、そのスタック フレームが無効になったときに実行できます」と述べています。
他の変数ではそうではないかどうかを指摘しました...基本的に、ラムダ式について本当に何を知っているのか疑問に思います。
私が心に留めていることは、次のようなものです。
public void Foo(ComplexObject val, out SomeDelegate outDelegate)
{
ComplexObject obj = new ComplexObject(val)
SomeDelegate = delegate(int other) { return (obj.value * other); }
}
public void Bar()
{
SomeDelegate MyDel = null;
Foo(5, out MyDel);
int finalRes = MyDel(100);
// Whatever
}
その状況では、何が起こっているのかよくわかりません。obj はスタック上の参照であり、メソッドの戻り時に有効ではなくなるため、匿名メソッドは (それが機能する場合) 実際にそれが参照型であることを認識し、値の代わりに参照をコピーできる必要があります... 「ユースケース」が多かれ少なかれ同じである場合、ref params が機能しないのはなぜですか?