IReadOnlyCollection
に変換しようとすると、さまざまなコレクション(すべてがIReadOnlyCollection
インターフェイスを実装する)がコンパイラによって異なる方法で処理されるのはなぜですか?IReadOnlyCollectionでの暗黙的/明示的なキャストの混乱
IReadOnlyCollection<int> a = new List<int>(); // everything fine
IReadOnlyCollection<int> b = new HashSet<int>(); // compiler wants me to cast
IReadOnlyCollection<int> c = new Stack<int>(); // compiler wants me to cast
IReadOnlyCollection<int> d = new Queue<int>(); // compiler wants me to cast
IReadOnlyCollection<int> e = new LinkedList<int>(); // compiler wants me to cast
IReadOnlyCollection<int> f = new SortedSet<int>(); // compiler wants me to cast
私は上記の例ではコンパイルエラーがこれです
を.NET 4.5を使用し、VisualStudioを2015年までだ:
タイプQueue<int>
/Stack<int>
/...暗黙的IReadOnlyCollection<int>
に変換することができません。明示的な変換が存在します。あなたはキャストを逃していますか?
私は
IReadOnlyCollection<int> d = new Queue<int>() as IReadOnlyCollection<int>;
かさえによってキャストを行う場合by
IReadOnlyCollection<int> d = (IReadOnlyCollection<int>)new Queue<int>();
すべてが問題ありません。コンパイルやランタイムエラーは発生しません。
IReadOnlyCollectionは、私が知る限り.NET 4.5以降に存在します。 – Kjara
'List'は一般的なクラスです。例えば、 'LinkedList'はListクラスのサブクラスです。それは相続問題についてかもしれませんが、私はその答えも学びたいと思います。 – pilkington
私はこれを再現することはできません - おそらく私たちの一つの手がかりとして、具体的にはコンパイラがエラーや警告と言っていることを教えてください。 –