expression bodied成员如何区分void和non-void?

How do expression bodied members distinguish between void and non-void?

使用 C# 6 的表达式体成员,我可以写:

public string FullName => $"{_firstName} {_lastName}";

我可以写:

static void Print(string message) => Console.WriteLine(message);

首先,表达式returns something。在第二个,它没有。

它在不需要任何额外语法的情况下确定如何 'act' 发生了什么?或者它只是在编译时查看方法签名的情况?

我不喜欢在不知道发生了什么的情况下把事情留给 'just work'。

首先,FullName是一个属性。它总是return是一个值。因此,主体的签名应该是 Func<T>,其中 T 是 return 类型(在您的示例中定义为 string)或等效的委托。

您的方法 void Print(string message) 的签名是 Action<string>,因为编译器理解 void 不 return 一个值并采用单个参数。它理解一些语句 return 一个值(如 => "a"),有些可以独立存在(尽管它们可能 return 一个值如 => new object())。因此它可以告诉你是否搞砸了:"CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement".