如何解决为什么List <>实现IList [duplicate]
| 这个问题已经在这里有了答案:解决方法
看看Eric Lippert的这篇博客文章:如此众多的界面。像往常一样,他有一些深刻的见识
确保阅读全部内容,但这是回答问题的引文:
为什么列表要实现IList?
有点奇怪,因为列出任何
除对象外的其他类型不
履行IList的全部合同。
可能会使其更容易
正在更新旧的C#1.0的人
使用泛型的代码;那些人
可能已经在确保
只有正确的类型进入他们的
列表。而且大多数时候
您正在传递一个IList,这是
这样被叫方就可以按索引访问
到列表中,而不是使其可以添加
任意类型的新项目。
,
IList
具有特殊的意义。特别是,它构成了许多数据绑定的中心,并在很大程度上充当了“我是一堆物品”的规范方式。
另请注意-泛型通过反射不方便;数据绑定对它们有些挣扎,他们倾向于使用非通用API。它有助于在绑定场景中,数据绑定代码使用的约定是,如果列表还具有非“ 1”索引器:
public SomeType this[int index] {get;}
然后假设项目是“ 3”列表,则可以令人满意地满足。
所以;这样可以提供与现有代码和数据绑定支持之间的向后兼容性。
, 向后兼容。这样,就可以将其注入到1.0 / 1.1的较旧框架/库中,或者从1.0 / 1.1迁移而未完全重构,或者与2.0+ .Net框架中的对象一起使用,它们仍然具有与1.0中相同的接口。 /1.1,而不必在新代码中放弃类型安全性。
, 我相信List实现了IList版本,因为这样做很简单,而且可能很有用,因为您无需将列表包装在另一个列表中即可将其传递给另一个类。
但是,它会对您尝试添加的所有项目进行类型检查,如果不匹配,则会抛出该项目。
, 原因是您可以拥有不同类型的ILists列表。
例如 -
List<int> ints = new List<int>();
List<string> strings = new List<string>();
List<IList> lists = new List<IList> { ints,strings};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。