C# 返回IList<;IList<;T>&燃气轮机;

C# 返回IList<;IList<;T>&燃气轮机;,c#,generics,interface,ilist,C#,Generics,Interface,Ilist,我有一个方法可以建立列表列表。我希望返回类型使用通用的IList接口来减少与下游的具体列表类型的耦合。但是,编译器很难进行类型转换 public IList<IList<T>> Foo<T>() { return new List<List<T>>(); } public-IList-Foo() { 返回新列表(); } 为什么这样做会失败 public IList<T> Foo<

我有一个方法可以建立列表列表。我希望返回类型使用通用的IList接口来减少与下游的具体列表类型的耦合。但是,编译器很难进行类型转换

public IList<IList<T>> Foo<T>()
    {
        return new List<List<T>>();
    } 
public-IList-Foo()
{
返回新列表();
} 
为什么这样做会失败

public IList<T> Foo<T>()
    {
        return new List<T>();
    } 
public-IList-Foo()
{
返回新列表();
} 
摆脱这种混乱局面最优雅的方法是什么?

只要这样做:

return new List<IList<T>>();
这个“out”告诉编译器,这个接口将只包含返回与
T
相关的值的方法(比如
GetEnumerator
),它不会包含任何将与
T
相关的内容作为参数的方法(比如
Add
)。你可以读更多


要实现T接口的接口,您的接口必须同时标记为out T或in T。IEnumerable标记为out T。

您使用的是.NET的哪个版本?小问题:
LinkedList
没有实现
IList
。感谢您的提示。我现在正在构建一个IEnumerable并使用Linq.ToList()返回。
Foo<int>().Add(new List<int>());
Foo<int>().Add(new []{1}); // arrays implement `IList`
public interface IEnumerable<out T>