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

前端之家收集整理的这篇文章主要介绍了c# – 编写一个接受out参数的lambda或匿名函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题在这里已经有一个答案:> 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.

猜你在找的C#相关文章