Delphiでは、関数内で関数を定義できます。例:
function Foo : integer;
var myvar : integer;
function Foo1;
begin
myvar := 42;
end;
begin
result := myvar;
end;
Foo1はFooのmyvarにアクセスできるため、これは予想どおり42を返します。
C#に同等のものはありますか?
はい、これを行うには多くの方法があります。1つの方法は、 FuncまたはActionのデリゲートを次のように宣言することです。
void Foo()
{
Func<int,int> f = x => x+1;
//or
Func<int,int> ff = x => {
return x+1;
};
var r = f(1); //2
var rr = ff(2); //3
Func<int,int,int> add => (a,b) => a+b;
var rrr = add(2,3); //5
}
省略形の宣言(=>
)は、Linqで一般的に使用されます。ラムダを参照してください。
最も愚かな長さのパラメータリストを除くすべてを許可するために、BCL(または今日呼ばれているもの)で宣言された多くのジェネリックFunc
およびデリゲートがあります。Action
より多くのパラメーターが必要な場合は、いつでも独自のジェネリックデリゲートを宣言できます。