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

时间:2010-01-02 04:02:53

标签: c# .net c#-3.0 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; }

有办法吗?

1 个答案:

答案 0 :(得分:19)

您可以使用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的推断。