C# 返回IList<;IList<;T>&燃气轮机;
我有一个方法可以建立列表列表。我希望返回类型使用通用的IList接口来减少与下游的具体列表类型的耦合。但是,编译器很难进行类型转换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<
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>