Why can a List<List<int>
not be passed to a function which accepts an IList<IList<int>
?
I can see how this type conversion may be hard to infer. However, it seems to work fine when converting to an IEnumerable<IEnumerable<int>
or starting with a int[][]
, as you can see from my test program. I can't understand why some of these type conversions are infered, when others are not.
internal class Program
{
static void Main(string[] args)
{
int[][] jaggedArray = { new int[] { 0 } };
Console.WriteLine(AcceptsIEnumerable(jaggedArray));
Console.WriteLine(AcceptsIList(jaggedArray));
List<List<int>> listArray = new() { new List<int> { 0 } };
Console.WriteLine(AcceptsIEnumerable(listArray));
// Not valid! Why?
//Console.WriteLine(AcceptsIList(listArray));
}
static bool AcceptsIEnumerable(IEnumerable<IEnumerable<int>> x)
{
return true;
}
static bool AcceptsIList(IList<IList<int>> x)
{
return true;
}
}