为什么在Dictionary声明中使用接口?

时间:2012-11-29 08:59:42

标签: c# generics dictionary

我在项目中注意到了这段代码

Dictionary<int, IList> someDict = new Dictionary<int, IList>();

使用接口获取价值的理念是什么?这是否意味着我可以放入实现/支持IList的每个列表?例如,我可以将L List<int>List<string>放入字典中的值吗?

4 个答案:

答案 0 :(得分:4)

它允许您拥有更通用的类型,因此如果您稍后更改类型,将更容易重构。

List<T> or IList<T>

减少重构工作的最佳方法是尽可能使用IEnumerable。

答案 1 :(得分:2)

您可以将IList的任何实现作为值

Dictionary<int, IList> someDict = new Dictionary<int, IList>();
someDict[1] = new List<string>() { "Hello", "World" };
someDict[2] = new List<int>() { 42 };
someDict[3] = new int[] { 1, 2, 3 };
someDict[4] = new ArrayList();

答案 2 :(得分:1)

是的,您希望与特殊类分离,您只需确保字典中使用的类型提供IList功能。只要您的类型提供此类型,您就可以使用它,包括List<T>。它就像一个合同,确保了类型

上的一组方法/属性

答案 3 :(得分:1)

是的,您可以使用从声明的类型继承的类型。在您的情况下,List<int>是从List<T>构建的泛型类型,后者继承自IList。因此,是的,您可以在词典中使用List<int>