このコードが機能する理由は、Enumerator
がコレクションを変更できないためです。
var roList = new List<string>() { "One", "Two", "Three" };
IEnumerable<object> objEnum = roList;
List<object>
の代わりに, を使用して同じことを行おうとすると、暗黙的に型を にIEnumerable<object>
変換できないというコンパイラ エラーが発生します。わかりました、それは理にかなっており、私の意見では、配列から学んだ教訓として、Microsoft による良い決定でした。 List<string>
List<object>
しかし、私が理解できないのは、なぜ世界でこの強硬なルールが次のようなものに適用されるのReadOnlyCollection
ですか? の要素を変更することはできません。ReadOnlyCollection
では、Microsoft が読み取り専用のもので共分散を使用することを妨げた原因となった安全上の懸念は何ですか? ポインターなどを使用して、Microsoft が説明しようとしていたそのタイプのコレクションを変更する方法はありますか?