在迁移到.NET 2.0+之后,除了维护旧代码外,是否仍有使用systems.Collections命名空间的理由?是否应始终使用泛型命名空间?
在迁移到.NET 2.0+之后,除了维护旧代码外,是否仍有使用systems.Collections命名空间的理由?是否应始终使用泛型命名空间?
非泛型 泛型对应物 --------------------------------------------------------- ArrayList List<T> BitArray N/A CaseInsensitiveComparer N/A CollectionBase Collection<T> Comparer Comparer<T> DictionaryBase Dictionary<TKey,TValue> Hashtable Dictionary<TKey,TValue> Queue Queue<T> ReadOnlyCollectionBase ReadOnlyCollection<T> SortedList SortedList<TKey,TValue> Stack Stack<T>
DictionaryEntry KeyValuePair<TKey,TValue>
ICollection N/A(使用IEnumerable <T>或任何扩展它的内容) IComparer IComparer<T> IDictionary IDictionary<TKey,TValue> IEnumerable IEnumerable<T> IEnumerator IEnumerator<T> IEqualityComparer IEqualityComparer<T> IList IList<T>
ICollection是不可变的(没有成员来更改集合的内容),而ICollection<T>是可变的。这使得接口仅在名称上类似,而ICollection和IEnumerable<T>之间几乎没有区别。
从此列表中,唯一没有泛型对应物的非泛型类是 BitArray 和 CaseInsensitiveComparer。
我看了一篇关于c#团队的Anders Hejlsberg的采访,他被问及是否对之前的.net版本有任何遗憾。没有在asp.net 1.0中使用泛型是他提到的第一件事。没有使用它意味着他们必须实现解决方法,这些解决方法将与.net库保持一致,并很快成为遗留代码。
我从未使用System.Collections命名空间,从他的陈述来看,这似乎是正确的路径。
List<Person>
并且你想将它传递给一个接受 List<object>
的方法,你不能这样做,因为 List<Person>
不能直接转换为 List<object>
。