You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将线程安全的LockSDP单例属性代码改写为一行?

线程安全单例属性的一行改写方案

方案1:合并语句体为一行(推荐,保持可读性)

直接将原属性的get块内容合并到一行,保留原有的双重检查锁定线程安全逻辑,语法完全合规:

private static LockSDP instance;
private static readonly object _lock = new();
public static LockSDP GetInstance { get { if (instance is null) lock (_lock) instance ??= new LockSDP(); return instance; } }

方案2:表达式体写法(不推荐,可读性差)

如果一定要用表达式体(=>)实现,需要替换lock语法糖为Monitor类API(因为lock是语句,不能直接用于表达式):

private static LockSDP instance;
private static readonly object _lock = new();
public static LockSDP GetInstance => instance ??= (Monitor.Enter(_lock, out var lockTaken) ? (instance = instance ?? new LockSDP(), Monitor.Exit(_lock), instance) : instance);

关于报错的说明

你截图中的Invalid expression term 'lock'错误,是因为尝试将lock语句直接放在表达式体(=>)中导致的。lock是C#的语句级语法,不能出现在表达式上下文里,因此要么用方案1的语句体写法,要么用方案2的Monitor API替代。

内容的提问来源于stack exchange,提问作者Oguz Demirel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:35:16