我有两个问题:
问题 1 背景: 在查看 Microsoft 的 LINQ 中“AsEnumerable()”方法的实现时,我注意到:
public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerable<TSource> source)
{
return source;
}
问题 1: 我在这里期待某种类型的转换或其他东西,但它只是返回它传递的值。这是如何运作的 ?
问题 2/3 背景: 我一直在尝试理解协方差、逆变和不变量。我想,我有一个模糊的理解,即在将子类型分配给父类型时,'in' 和 'out' 关键字决定了多态行为。
问题2: 我从阅读中知道 IEnumerable 是协变的,而 List 是不变的,那么为什么这是不可能的:
List<char> content = "testString".AsEnumerable();
问题 3:
如果 IList 实现 IEnumerable 那么为什么这是不可能的:
IEnumerable<char> content1 = "testString";
IList<char> content2 = content1;
请帮助我理解,提前谢谢。