为什么这个转换不隐式工作?

Why doesnt this cast work implicitly?

    public IList<IList<string>> GetListOfLists()
    {
        var result = new List<List<string>>();
        return result;
    }

为什么List实现IList时return语句会抛出这个编译错误?

Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.List<string>>' to 'System.Collections.Generic.IList<System.Collections.Generic.IList<string>>'. An explicit conversion exists (are you missing a cast?) c:\ConsoleApplication1\Program.cs 18 20 ConsoleApplication1

最好的解决方法是什么?

您的转换将隐含地用于 List<T>IList<T>。但是,List<List<T>>IList<IList<T>> 不协变,因为类型参数不同。

在不更改 return 类型的情况下,您可以做的最好的事情是

var result = new List<IList<string>>();

这对您的情况没有影响,因为 IList<string>List<string> 改变了 returned 列表的类型,而不是内容。特别是,您当然可以添加 IList<string> 作为 result.

的元素

为什么不用这个...

public List<List<string>> GetListOfLists()
{
    var result = new List<List<string>>();
    return result;
}

还是我遗漏了您需要的东西?