C# 表达体成员如何区分无效和非无效?

C# 表达体成员如何区分无效和非无效?,c#,.net,expression,il,c#-6.0,C#,.net,Expression,Il,C# 6.0,有了C#6的表情体成员,我可以写: publicstringfullname=>$“{{u firstName}{u lastName}” 我可以写: 静态无效打印(字符串消息)=>Console.WriteLine(消息) 在第一个实例中,表达式返回一些内容。在第二种情况下,它没有 这里发生了什么事情,让它决定如何“行动”,而不需要任何额外的语法?或者它只是在编译时查看方法签名的一个例子 我不太喜欢在不知道发生了什么事情的情况下让事情‘正常运转’。首先,FullName是一种属性。它总是返回一

有了C#6的表情体成员,我可以写:

publicstringfullname=>$“{{u firstName}{u lastName}”

我可以写:

静态无效打印(字符串消息)=>Console.WriteLine(消息)

在第一个实例中,表达式返回一些内容。在第二种情况下,它没有

这里发生了什么事情,让它决定如何“行动”,而不需要任何额外的语法?或者它只是在编译时查看方法签名的一个例子


我不太喜欢在不知道发生了什么事情的情况下让事情‘正常运转’。

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


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

我认为
$”…
只是
String.Format(…)
的一个简短版本,它无疑会返回一个
字符串
。这是另一个C#6特性,称为字符串插值。也许我把它当作一个测试片段,把水弄脏了。我的问题更多的是关于表达式语法如何决定返回什么以及何时返回。在第二个示例中,返回类型是
void
,不是吗?编译器对此没有进一步的决定。我看不出你的问题。第一个是属性,第二个是方法(我可能不明白问题是不是?:p)@AlexanderDerck,如果方法返回字符串而不是void怎么办?这与实际的推断类型无关。