编写一个接受out参数的lambda或匿名函数

我的代码中定义了一个委托:

public bool delegate CutoffDateDelegate( out DateTime cutoffDate ); 

我想创建委托并使用lambda或匿名函数初始化,但这些都没有编译。

 CutoffDateDelegate del1 = dt => { dt = DateTime.Now; return true; } CutoffDateDelegate del2 = delegate( out dt ) { dt = DateTime.Now; return true; } 

有办法做到这一点吗?

您可以使用lambda或匿名委托语法 – 您只需指定参数的类型,并将其标记为out:

 public delegate bool CutoffDateDelegate( out DateTime cutoffDate ); // using lambda syntax: CutoffDateDelegate d1 = (out DateTime dt) => { dt = DateTime.Now; return true; }; // using anonymous delegate syntax: CutoffDateDelegate d2 = delegate( out DateTime dt ) { dt = DateTime.Now; return true; } 

虽然预期将参数明确声明为ref / out,但必须在lambda表达式中声明参数类型不太常见,因为编译器通常可以推断它们。 但是,在这种情况下,编译器当前不会推断lambda / anon表达式中out或ref参数的类型。 我不确定这种行为是否是一个错误/疏忽,或者是否有语言原因必须如此,但是有一个简单的解决方法。

编辑:我在VS2010β2中做了快速检查,看起来你必须定义参数类型 – 它们不是C#4的推断。