方法中的c#方法

Jac*_*ack 3 c# methods

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

function Foo : integer;
var myvar : integer;
    function Foo1;
    begin
        myvar := 42;
    end;
begin
    result := myvar;
end;
Run Code Online (Sandbox Code Playgroud)

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

C#中有没有相应的东西?

spe*_*der 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
}
Run Code Online (Sandbox Code Playgroud)

简写声明(=>)通常用于Linq.见lambdas.

在BCL中声明了许多泛型FuncAction委托(或称为nowdays),以允许除了最愚蠢的长度参数列表之外的所有参数列表.如果需要更多参数,可以随时声明自己的通用委托.

  • 一个有趣的小问题是你声明的函数实际上被移到函数Foo()之外,并且通过创建一个自动生成的类来维护状态,其中所有共享变量都是公共成员......但我离题了:) (3认同)