Versuchen:
return new ReadOnlyCollection<UserValue>(_Values);
Edit:
Anbetracht dessen, was Sie zu Jon gesagt haben, Ihr Code keinen Sinn macht. Ihr get
bezieht sich auf einen Typ von List<UserValue>
, aber Sie möchten es in einen Typ von ReadOnlyCollection<UserValues>
konvertieren, was nicht getan werden kann - das sind 2 Sammlungen von 2 verschiedenen Typen.
Wir benötigen weitere Informationen, um Ihnen bei der Beantwortung dieser Frage zu helfen. Möchten Sie Ihre UserValues
Klasse eine Sammlung von UserValues
Typen oder eine Sammlung von UserValue
Typen zurückgeben? Ihr Code bedeutet UserValue
, aber Sie folgen auf Kommentare Status UserValues
. Sind Sie sicher, dass Ihr Vorgesetzter keinen Tippfehler gemacht hat?
Wenn nicht, müssen Sie einige interne Sammlung wie folgt:
private readonly List<UserValues> _MoreValues = new List<UserValues>();
Und dann die Rückkehr in die Syntax, die ich (oder andere, die geantwortet haben - alle gegebenen Antworten sind gültig für eine Umwandlung Liste zu einer ReadOnlyCollection) haben gezeigt.
Beachten Sie, dass mein Code Targeting .NET 3.5 kompiliert, vorausgesetzt, dass die Typen kompatibel sind (dh ReadOnlyCollection<UserValue>
Wraps List<UserValue>
oder beide sind UserValues
).
Die Klasse 'Liste' 'hat object' als Basisklasse. Die Klasse 'ReadOnlyCollection ' ist daher keine Basisklasse, und da keine impliziten Operatoren definiert sind, können Sie nicht einfach zwischen diesen beiden Klassen konvertieren. Wenn Sie eine neue 'ReadOnlyCollection <>' erstellen möchten, verwenden Sie '_Values.AsReadOnly()'. Wenn Sie die neueste .NET-Version (4.5, VS2012) verwenden, können Sie den Eigenschaftstyp auf die Schnittstelle 'IReadOnlyList ' ändern. Da 'List <>' IReadOnlyList <> 'implementiert, erfordert dies keine Umwandlung. Es ist nicht so sicher (wenn Sie den Verbrauchern Ihrer Klasse nicht vertrauen). –
Ein entschlossener Verbraucher könnte Reflektion verwenden, um an der 'IList' durch eine 'ReadOnlyCollection 'auch zu bekommen, obwohl - es gibt nicht viel, was Sie tun können, jemanden mit den Innereien Ihrer Klassen zu stören, wenn sie wirklich, wirklich wollen . Ich denke, wenn sie entschlossen sind, Dinge zu brechen, werden sie einen Weg finden, also ist es nicht wichtig, sich zu viele Sorgen zu machen. –
Ich habe versucht, _Values.AsReadOnly() als Jeppe erwähnt und den gleichen Compiler-Fehler erhalten. Und ich verwende nur vs2008, also habe ich keinen Zugang zu der Schnittstelle, die er erwähnt hat. – Debbie