我在我的代码中定义了一个委托(delegate):
public bool delegate CutoffDateDelegate( out DateTime cutoffDate );
我想创建委托(delegate)并使用 lambda 或匿名函数进行初始化,但这些都没有编译。
CutoffDateDelegate del1 = dt => { dt = DateTime.Now; return true; }
CutoffDateDelegate del2 = delegate( out dt ) { dt = DateTime.Now; return true; }
有什么办法吗?
您可以使用 lambda 或匿名委托(delegate)语法 - 您只需要指定参数的类型,并将其标记为 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 推断的。