Хотите ли вы, чтобы какие-либо изменения , сделанные вашим классом в будущем, были отражены в возвращенном списке? Если это так, просто
return new ReadOnlyCollection<T>(list);
было бы хорошо.
Однако, если вы хотите вернуть коллекцию, которая ничего не изменит в будущем (т. Е. Полностью независимая копия исходного списка), вы можете использовать:
return new ReadOnlyCollection<T>(list.ToList());
(Использование метода LINQ ToList
- очень простой способ клонирования списка.)
Обратите внимание, что если тип элемента списка является изменяемым ссылочным типом, изменения данных в ссылочных объектах все равно будут видны всем.