使用C#6表达身体的成员,我可以写:
public string FullName => $"{_firstName} {_lastName}";
我可以写:
static void Print(string message) => Console.WriteLine(message);
在第一个实例中,表达式返回一些东西。在第二个,它没有。
这里发生了什么,以确定如何“行动”而不需要任何其他语法?或者它只是在编译时查看方法签名的情况?
在不知道发生了什么的情况下,我不会把事情留给“正常工作”。
答案 0 :(得分:4)
首先,FullName
是一个属性。 总是返回一个值。因此,正文的签名应该是Func<T>
,其中T
是返回类型(在您的示例中定义为string
)或等效的委托。
方法void Print(string message)
的签名是Action<string>
,因为编译器理解void不返回值并且只接受一个参数。它理解一些语句返回一个值(如=> "a"
),有些语句可以独立存在(尽管它们可能会返回类似=> new object()
的值)。因此它可以告诉你是否搞砸了:“CS0201:只有赋值,调用,递增,递减和新对象表达式可以用作语句”。