это работает, только если я добавляю его непосредственно в поле
Поскольку вы не присваиваете только что созданный SynchronizedCollection
для _s
.Каждый раз, когда вы вызываете S
getter, создается новая коллекция, все элементы копируются , и элемент добавляется в нее._s
на самом деле остается нетронутым.
lock (_s.SyncRoot)
{
_s = new SynchronizedCollection<int>(_s.SyncRoot, _s);
return _s;
}
Хотя я не думаю, что это необходимо для создания новой коллекции каждый раз, SynchronizedCollection
сам по себе является потокобезопасным, поэтому вы можете просто вернуть _s
, но нене знаю фактического сценария, почему вы это делаете.