次の密閉クラスがあります。私はReadOnlyCollection
としてリストを返そうとしています。いくつかのことを試してみましたが、私はこれをやっていません。だから私はどのように返すか、リストをreadonlyコレクションにキャストしますか?エラーが発生する理由:「System.Collections.Generic.List型を暗黙的に変換できません」
public sealed class UserValues
{
private readonly List<UserValue> _Values = new List<UserValue>();
public ReadOnlyCollection<UserValues> Values
{
get
{
return _Values;
}
}
}
クラス 'リストをは' 'その基底クラスとしてobject'ました。 'ReadOnlyCollection 'クラスは、したがって、基本クラスではなく、暗黙の演算子が定義されていないことから、あなただけのようなこの2つのクラスの間で変換することはできません。新しい 'ReadOnlyCollection <>'を作成したい場合は、 '_Values.AsReadOnly()'を使います。最新の.NETバージョン(4.5、VS2012)を使用する場合は、プロパティタイプをインタフェース 'IReadOnlyList 'に変更することができます。 'List <>'は 'IReadOnlyList <>'を実装しているので、キャストは必要ありません。安全ではありません(あなたのクラスの消費者を信頼しない場合)。ずっとあなたが、彼らは本当に、本当にしたい場合は、あなたのクラスの内臓をいじって誰かを停止するために行うことができますがありません - –
Aは、消費者が '' ReadOnlyCollectionは 'もかかわらによってラップ' IListので取得するためにリフレクションを使用することができます決定しました。私は、もし彼らが*物を壊そうと決心すれば、彼らは道を見つけるだろう、だからあまり心配する価値はない。 –
Jeppeが述べたように_Values.AsReadOnly()を実行しようとしたところ、まったく同じコンパイラエラーが発生しました。そして私はvs2008だけを使用しているので、彼が言及したインターフェースにアクセスすることはできません。おそらく理想的ではありません - 'ReadOnlyCollection'ラッパープロパティにアクセスするたびに新しいインスタンスを作成します –
Debbie