3

Delphiでは、関数内で関数を定義できます。例:

function Foo : integer;
var myvar : integer;
    function Foo1;
    begin
        myvar := 42;
    end;
begin
    result := myvar;
end;

Foo1はFooのmyvarにアクセスできるため、これは予想どおり42を返します。

C#に同等のものはありますか?

4

1 に答える 1

11

はい、これを行うには多くの方法があります。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より多くのパラメーターが必要な場合は、いつでも独自のジェネリックデリゲートを宣言できます。

于 2012-09-17T00:23:57.993 に答える