在Delphi中,您可以在函数中定义函数,例如:
function Foo : integer;
var myvar : integer;
function Foo1;
begin
myvar := 42;
end;
begin
result := myvar;
end;
这会按预期返回42,因为Foo1可以访问Foo的myvar。
C#中有没有等效的内容?
答案 0 :(得分:11)
是的,有很多方法可以做到这一点。一种方法是声明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。请参阅lambdas。
在BCL中声明了许多通用Func
和Action
委托(或称为nowdays),以允许除了最愚蠢的长度参数列表之外的所有委托。如果需要更多参数,可以随时声明自己的通用委托。