私の質問の文脈をよりよく説明するために、いくつかの仮説から始めます。
配列共分散
仮定 1.1
値型の配列は共変ではありません。int[]
お渡しできませんobject[]
。
仮定 1.2
参照型の配列は、有効な と共変ですIEnumerable
。string[]
を渡すことができますIEnumerable<object>
)。
仮定 1.3
参照型の配列は、有効な共変配列と共変です。string[]
を渡すことができobject[]
ます。
リストの共分散
仮定 2.1 (1.1 と同じ)
値型のリストは共変ではありません。List<int>
お渡しできませんList<object>
。
仮定 2.2 (1.2 と同じ)
参照型のリストは、有効な と共変ですIEnumerable
。List<string>
を渡すことができますIEnumerable<object>
)。
公準 2.3 (1.3 とは異なる)
参照型のリストは、有効な共変と共変ではありませんList
。List<string>
には渡せませんList<object>
)。
私の質問は、仮定 1.3、2.2、および 2.3 に関するものです。具体的には:
- には合格できるのに、 には
string[]
合格できないのはなぜですか?object[]
List<string>
List<object>
List<string>
for を通過できるのに for を通過できIEnumerable<object>
ないのはなぜList<object>
ですか?