这在c#中被称为什么?那你怎么做/语法? 这被称为“内联函数”吗?
我是一个方法。 在这种方法中,我想重复使用相同的代码。也许你可以在其他语言中使用变量。
e.g。
// I have a bit of code to define an expression expl
line1: int x = 0;
line2: var expl = { x+=2 }
line3: ... use expl // x now =2
line4: ... use expl // x now =4
line5: ... use expl // x now =6
line6: ... ... do other things ...
line7: ... use expl
... and so it goes on
与上面的伪代码不同,我的表达式相当冗长,而且我不应该像我应该创建一个函数一样。在这个方法中,应用程序中唯一的位置(因为我目前缺少一个更好的术语)将永远不会被使用。
请理解我不是简单地尝试在我的生产表达式中添加2到x。我会使用x
在每一行上执行此操作。在生产中expl
实际上是一个五行三元表达式(我相信我在这种情况下正确地使用了术语表达式)所以我不会一遍又一遍地切断和过去相同的五行: - )
感谢。
答案 0 :(得分:4)
int x = 0;
Action addTwo = () => x += 2;
addTwo();
addTwo();
Action
是delegate
的特定形式,类似于内联函数。它使用在其自己的范围之外声明的变量的事实使它也成为闭包。使用.NET框架定义的其他delegate
包括Action<>
的各种通用形式(因此您可以将参数传递给它)和Func<>
(因此您可以从中返回值) )。但是您也可以声明自己的命名委托,它具有您喜欢的任何方法签名。
上面的代码使用 lambda表达式或 lambda语法,但您也可以更明确地声明它:
Action addTwo = delegate() { x += 2 };
尚未发布的C# 7 is expected to have Local Functions,基本上是相同的,但语法略有不同:
void AddTwo() => x += 2;
或
void AddTwo() { x += 2; }
答案 1 :(得分:2)
您正在寻找的术语是"anonymous function" or "lambda expression"。
您要做的最简单的方法是使用Action<>
或Func<>
通用委托类型。如果要返回值,请使用Func<>
返回void use Action<>
。
在您的示例中,您可以像这样编写表达式行:
Func<int> expl = () => x += 2;
这将向x
添加2并返回结果。