Просто наткнулся на это:
Func<List<object>> foo = () => new List<object>();
List<string> s = (List<string>)foo();
IList<string> s1 = (IList<string>)foo();
Компилятор жалуется на листинг в List (имеет смысл), но ничего не говорит о IList. Заставляет меня задаться вопросом, почему?