表达身体的成员如何区分虚空和非虚空?

时间:2016-02-18 09:20:12

标签: c# .net expression il c#-6.0

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

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

我可以写:

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

在第一个实例中,表达式返回一些东西。在第二个,它没有。

这里发生了什么,以确定如何“行动”而不需要任何其他语法?或者它只是在编译时查看方法签名的情况?

在不知道发生了什么的情况下,我不会把事情留给“正常工作”。

1 个答案:

答案 0 :(得分:4)

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

方法void Print(string message)的签名是Action<string>,因为编译器理解void不返回值并且只接受一个参数。它理解一些语句返回一个值(如=> "a"),有些语句可以独立存在(尽管它们可能会返回类似=> new object()的值)。因此它可以告诉你是否搞砸了:“CS0201:只有赋值,调用,递增,递减和新对象表达式可以用作语句”