Prova:
return new ReadOnlyCollection<UserValue>(_Values);
Edit:
Dato quello che hai detto a Jon, il codice non ha senso. Il tuo get
fa riferimento a un tipo di List<UserValue>
, ma tu vuoi convertirlo in un tipo di ReadOnlyCollection<UserValues>
, che non può essere fatto - cioè 2 raccolte di 2 tipi diversi.
Avremo bisogno di ulteriori informazioni per aiutarti a rispondere a questa domanda. Desideri la tua classe UserValues
per restituire una raccolta di tipi UserValues
o una raccolta di tipi UserValue
? Il tuo codice implica UserValue
, ma i tuoi commenti su follow sono UserValues
. Sei sicuro che il tuo supervisore non abbia fatto un refuso?
In caso contrario, avrete bisogno di un po 'di raccolta interna in questo modo:
private readonly List<UserValues> _MoreValues = new List<UserValues>();
e poi tornare che, nella sintassi che io (o altri che hanno risposto - tutte le risposte fornite sono valide per la conversione di un Elenco a ReadOnlyCollection) hanno mostrato.
Nota che il mio codice compila il targeting .Net 3.5, presumendo che i tipi siano compatibili (ovvero ReadOnlyCollection<UserValue>
wraps List<UserValue>
, o entrambi sono UserValues
).
La classe 'List' 'ha object' come la sua classe base. La classe 'ReadOnlyCollection ' non è quindi una classe base, e poiché non sono definiti operatori impliciti, non è possibile semplicemente convertire tra queste due classi in questo modo. Se vuoi creare un nuovo 'ReadOnlyCollection <>', usa '_Values.AsReadOnly()'. Se si utilizza la versione .NET più recente (4.5, VS2012), è possibile modificare il tipo di proprietà nell'interfaccia 'IReadOnlyList '. Poiché 'List <>' implementa 'IReadOnlyList <>', questo non richiede cast. Non è sicuro (se non ti fidi dei consumatori della tua classe). –
Un consumatore determinato potrebbe utilizzare il reflection per ottenere il 'IList' avvolto anche da un 'ReadOnlyCollection ', tuttavia - non c'è molto che puoi fare per impedire a qualcuno di fare scherzi con le interiora delle tue classi se davvero, davvero vogliono . Immagino che se * sono * determinati a rompere le cose, troveranno un modo, quindi non vale la pena preoccuparsi troppo. –
Ho provato a fare _Values.AsReadOnly() come menzionato da Jeppe e ottenere lo stesso errore del compilatore. E sto usando solo vs2008, quindi non ho accesso all'interfaccia che ha menzionato. – Debbie