表达式 - 身体属性中的锁定语句

ygo*_*goe -2 c# c#-6.0

所以这不起作用:

public int BufferedCount => { lock (buffer) { return buffer.Count; } }
Run Code Online (Sandbox Code Playgroud)

第一个{出乎意料.但我不知道为什么.

这也行不通:

public int BufferedCount => lock (buffer) { return buffer.Count; }
Run Code Online (Sandbox Code Playgroud)

buffer是一个私有列表,必须防止来自多个线程的并行请求.该属性应该提供该列表的当前计数.

我想我最近在lock某个地方看到了一个带有声明的表达式身体,但我无法弄清楚它的外观如何.

Ser*_*rvy 6

lock语句是一个语句,不表达,所以它不能是表达浓郁成员的表达.您需要使用传统的方法体语法来使主体成为lock语句.

lock在表达式bodied成员中使用语句的唯一方法是使用某种组合其他语句的表达式,除了不使用表达式bodied语法之外,这些语句都是超级hacky和更多的工作.你必须做一些像定义lambda并立即执行它的东西,这将涉及比编写传统方法体更多的样板代码.