c# - 编写接受 out 参数的 lambda 或匿名函数

标签 c# .net c#-3.0 lambda

<分区>

我在我的代码中定义了一个委托(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 推断的。

关于c# - 编写接受 out 参数的 lambda 或匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1990569/

相关文章:

c# - 如何强制相对 URI 使用 https?

c# - 用于单元测试的虚拟 ObjectList 生成器

c# - 在属性树上使用 IWindowsFormsEditorService 进行下拉列表不会关闭

c# - 公开自托管服务时以编程方式从配置文件中读取 WCF 行为元素

c# - 带有自定义连接字符串的 EF 6 程序化迁移

c#-3.0 - MSTest 与 Moq - DAL 设置

c# - p/invoke 操作以执行另一个函数结束

c# - 连接到不安全的gRPC channel 时的"The response ended prematurely"

.net - ChannelFactory 在端点上没有地址,为什么?

c# - C#中扩展方法背后的设计动机是什么