功能 'inferred delegate type' 在 C# 9.0 中不可用



我正在尝试编写以下代码:

var name = "Kyle";
var sayHello = () => $"Hello, {name}";
Console.WriteLine(sayHello());

但我得到了错误:

Feature 'inferred delegate type' is not available in C# 9.0.

这意味着什么?我该如何解决?

问题

问题是实际的lambda表达式本身() => $"Hello, {name}"实际上没有类型((。

只有当它被转换为时,它才会被键入

  • 类型为FuncAction的委托
  • 或者Expression类型的表达式树(然后可以将其编译为委托(

C#10中的解决方案

C#10对lambda进行了一些改进,包括推断出的委托类型,这意味着C#现在可以确定(推断(lambda将用作委托函数,因此在升级到C#10时可以使用原始语法:

var sayHello = () => $"Hello, {name}";

以前的解决方案

如果不能升级到C#10,有几种方法可以显式键入lambda。

您可以提供显式类型,而不是使用var:

Func<string> sayHello = () => $"Hello, {name}";

或者,您可以使用func构造函数来键入表达式:

var sayHello = new Func<string>(() => $"Hello, {name}");

.NetFiddle中的演示

进一步阅读

  • 委托关键字与lambda表示法
  • 如何使用匿名方法返回值

相关内容

  • 没有找到相关文章

最新更新