在定义后立即执行lambda表达式?

有没有办法在定义后立即执行lambda表达式?

换句话说(无效的C#代码):

(() => { Console.WriteLine("Hello World"); }).Invoke(); 

当然。

 new Action(() => { Console.WriteLine("Hello World"); })(); 

这应该够了吧。

另一个“选项”,其他两个答案只是略有不同:

 ((Action)(() => { Console.WriteLine("Hello World"); }))(); 

原因, 直接取自phoog的评论

…你没有告诉编译器你是想要Action还是Expression 。 如果将该lambda表达式强制转换为Action ,则可以在其上调用Invoke或使用方法调用语法()来调用它。

它肯定会变得丑陋,我不知道这个表单有用的地方,因为它不能用于没有名字的递归…

你应该能够做到这一点:

 Action runMe = () => { Console.WriteLine("Hello World"); }; runMe(); 

这是一个如何使用它的例子。 您希望使用几行代码的结果初始化构造函数,这些代码不能作为函数编写,因为这是第三方API的结构。

它只是胶水代码,以防止编写一个永远不会在其他地方调用的独立函数。 我使用的是Func而不是Action ,但答案与user166390相同。

  // imagine several dozens of lines that look like this // where the result is the return value of a function call fields.Add(new ProbeField(){ Command = "A", Field = "Average", Value = be.GetAverage() }); // now you need something that can't be expressed as function call // so you wrap it in a lambda and immediately call it. fields.Add(new ProbeField(){ Command = "C", Field = "Cal Coeff", Value = ((Func)(() => { CalCoef coef; Param param; be.GetCalibrationCoefficients(out coef, out param); return coef.lowDet1.ToString(); }))() });