[asp.net-mvc]这条线是什么?X = Y => Z(Y)

发布时间: 2017/3/25 1:56:10
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我读到了 Web API 2 和实体框架在那里我遇见了跨越这条线︰

this.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

我抬起头 => 运算符和发现它已经跟 lambda 时,虽然我还不能确定到底多么适合或什么怎么回事。谁能帮帮我吗?这条线怎么回事?

解决方法 1:

Database.Log 属性的类型是 Action<string> 。这意味着它是委托,接受一个字符串并没有返回值 (即它的返回类型是 void )。所以这条线将分配到 Log 属性匿名函数,它接受 string 值并将它写入到调试器窗口。

因为具有已知的委托类型,将 lambda 表达式分配给属性,编译器可以推断出参数的类型 ( s ) 和从上下文返回类型。这是简写形式

this.Database.Log = (delegate (string s){ System.Diagnostics.Debug.WriteLine(s); });

而这种短的手为 (作为其他答案提及) 创建一个私有方法和分配到该私有方法的委托引用︰

this.Database.Log = (Action<string>)__compiler_generated_function__;

private void __compiler_generated_function__(string s) {
    System.Diagnostics.Debug.WriteLine(s);
}
赞助商