Try:
return new ReadOnlyCollection<UserValue>(_Values);
Edit:
Учитывая то, что вы сказали Джону, что ваш код не имеет смысла. Ваш get
ссылается на тип List<UserValue>
, но вы хотите преобразовать его в тип ReadOnlyCollection<UserValues>
, который не может быть выполнен - это 2 коллекции из 2 разных типов.
Нам нужна дополнительная информация, которая поможет вам ответить на этот вопрос. Вы хотите, чтобы ваш класс UserValues
возвращал коллекцию из UserValues
типов, или коллекцию из UserValue
? Ваш код подразумевает UserValue
, но следующее по комментариям: UserValues
. Вы уверены, что ваш руководитель не сделал опечатку?
Если нет, то вы будете нуждаться в какой-то внутренний сбор примерно так:
private readonly List<UserValues> _MoreValues = new List<UserValues>();
А потом вернуться, что в синтаксисе, что я (или другие, которые ответили - все ответы, данные действительны для преобразования Список ReadOnlyCollection).
Обратите внимание, что мой код компилирует таргетинг .Net 3.5, предполагая, что типы совместимы (то есть ReadOnlyCollection<UserValue>
обертывает List<UserValue>
или оба являются UserValues
).
Класс 'Список' 'имеет object' в качестве базового класса. Поэтому класс 'ReadOnlyCollection ' не является базовым классом, и поскольку не определены неявные операторы, вы не можете просто преобразовать эти два класса. Если вы хотите создать новый 'ReadOnlyCollection <>', используйте '_Values.AsReadOnly()'. Если вы используете новейшую версию .NET (4.5, VS2012), вы можете изменить тип свойства на интерфейс 'IReadOnlyList '. Поскольку 'List <>' реализует 'IReadOnlyList <>', это не требует никакого броска. Это не так безопасно (если вы не доверяете потребителям своего класса). –
Определенный потребитель может использовать отражение, чтобы получить в 'IList', обернутый 'ReadOnlyCollection ' тоже, хотя - вы не можете сделать, чтобы кто-то не возился с внутренностями ваших классов, если они действительно, действительно хотят , Я полагаю, что если они * решили * сломать вещи, они найдут способ, поэтому не стоит слишком беспокоиться. –
Я пробовал делать _Values.AsReadOnly(), как упоминал Jeppe, и получить ту же самую ошибку компилятора. И я использую только vs2008, поэтому у меня нет доступа к упомянутому интерфейсу. – Debbie