何时使用IList和何时使用List?

211

我知道IList是接口类型,而List是具体类型,但我仍然不知道何时应该使用它们中的哪一个。现在我做的是,如果我不需要Sort或FindAll方法,我就使用接口。我是对的吗?有没有更好的方法来决定何时使用接口或具体类型?


2
如果有人还在疑惑,我认为最好的答案在这里:https://dev59.com/h3RC5IYBdhLWcg3wJNcN - Crismogram
12个回答

1
一个 List 对象允许您创建列表、添加元素、删除元素、更新元素、索引等。当您只想要一个指定对象类型的通用列表时,可以使用 List
另一方面,IList 是一个接口。如果您想创建自己的自定义 List,比如名为 BookList 的列表类,那么您可以使用该接口为您的新类提供基本方法和结构。当您想要创建实现 List 的特殊子类时,可以使用 IList
另一个区别是:IList 是一个接口,不能被实例化。而 List 是一个类,可以被实例化。这意味着:
IList<string> list1 = new IList<string>(); // this is wrong, and won't compile

IList<string> list2 = new List<string>();  // this will compile
List<string> list3 = new List<string>();   // this will compile

1
在我通常遇到的情况下,我很少直接使用IList。
通常我只是将其作为方法的参数使用。
void ProcessArrayData(IList almostAnyTypeOfArray)
{
    // Do some stuff with the IList array
}

这将允许我在.NET框架中对几乎任何数组进行通用处理,除非它使用IEnumerable而不是IList,有时会发生这种情况。

实际上,这取决于您需要的功能类型。我建议在大多数情况下使用List类。当您需要创建一个可能具有一些非常特定规则的自定义数组,并且希望将其封装在集合中以避免重复,但仍希望.NET将其识别为列表时,最好使用IList。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接