加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:38:26 所属栏目:百科 来源:网络整理
导读:这个问题在这里已经有一个答案: How to circumvent using an out parameter in an anonymous method block?2 我的代码中定义了一个委托: public bool delegate CutoffDateDelegate( out DateTime cutoffDate ); 我想使用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读