У меня есть два вопроса:
Вопрос 1. Предыстория: при просмотре реализации метода AsEnumerable() в LINQ от Microsoft я заметил следующее:
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;
Пожалуйста, помогите мне понять, спасибо заранее.