表达式主体属性中的Lock语句

时间:2018-10-29 13:17:35

标签: c# c#-6.0

所以这不起作用:

public int BufferedCount => { lock (buffer) { return buffer.Count; } }

第一个{是意外的。但是我不知道为什么。

这也不起作用:

public int BufferedCount => lock (buffer) { return buffer.Count; }

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

我认为我最近在某个地方看到了带有lock语句的表达式密集型属性,但是我不知道它的外观如何。

1 个答案:

答案 0 :(得分:6)

lock语句是语句,而不是表达式,因此它不能是表达式主体成员的表达式。您需要使用传统的方法主体语法,使主体成为lock语句。

在表达式表达式强壮的成员中使用lock语句的唯一方法是使用某种形式的表达式来组成其他语句,这将是非常hacky的方式,比不使用表达式表达式强壮的语法要有更多的工作。您必须要做一些事情,例如定义一个lambda并立即执行它,这要比编写传统的方法主体涉及更多样板代码。