3

在 Delphi 中,您可以在函数中定义函数,例如:

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

这会按预期返回 42,因为 Foo1 可以访问 Foo 的 myvar。

C#中是否有任何等价物?

4

1 回答 1

11

是的,有很多方法可以做到这一点。一种方法是声明FuncAction委托,如下所示:

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 中很常用。请参阅lambdas

在 BCL(或现在所谓的任何东西)中声明了许多泛型Func和委托,以允许除最愚蠢的长度参数列表之外的所有参数列表。Action如果您需要更多参数,您始终可以声明自己的通用委托。

于 2012-09-17T00:23:57.993 回答