Как я могу написать следующий код в одну строку?
private static LockSDP instance;
private static readonly object _lock = new();
public static LockSDP GetInstance
{
get
{
if (instance is null) lock (_lock) instance ??= new();
return instance;
}
}

Я знаю, что более разумно использовать Lazy<T>. Я упрямо хотел написать хоть одну строчку, но не смог :') Спасибо..
Версия вашего изобретения с круглым колесом — stackoverflow.com/questions/2155688/what-is-a-singleton-in-c (в частности csharpindepth.com/Articles/Singleton от Джона Скита)
(Заголовок обновлен, чтобы соответствовать задаче, а не попытке решения, но не удалось добавить правильный тег code-golf, поскольку он запрещен по очевидной причине... Не стесняйтесь улучшать заголовок, если считаете, что мое редактирование не совсем соответствует вашей цели)





не все может быть одной строкой; однако это может быть проще; вы могли бы использовать Lazy<T>, но для простого static здесь, где вы в основном после отложенного создания экземпляра, я бы, вероятно, опирался на поведение статического поля и вложенный класс:
public static LockSDP GetInstance => LockProxy.Instance;
private static class LockProxy { public static readonly LockSDP Instance = new(); }
Я бы, наверное, предпочел ответ Марка, но так оно и есть:
private static readonly Lazy<LockSDP> _lazyInstance =
new Lazy<LockSDP>(() => new LockSDP()); // Default is Threadsafe access.
public static LockSDP Instance => _lazyInstance.Value;
И да: я понимаю, что это все еще 2 строки:/
Для справки: Ленивый<T>
режим потокобезопасности по умолчанию (если true не указан) — LazyThreadSafetyMode.ExecutionAndPublication, который выдает true, так что... вы, вероятно, можете пропустить это (источник); нит: _lazyInstance должно быть readonly
С Ленивым<T> :)