我将从几个假设开始,以更好地解释我的问题的背景:
数组协方差
假设 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>通过 forIEnumerable<object>但不能 forList<object>?