这个问题在这里已经有一个答案:>
How to circumvent using an out parameter in an anonymous method block?2
我的代码中定义了一个委托:
我的代码中定义了一个委托:
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 beta2,它仍然看起来像您必须定义参数类型 – 它们不推断为C#4.