C#中的集合类型

DE0006: Non-generic collections shouldn't be used

Motivation

When .NET was created, generic data types didn't exist, which is why the
collection types in the [System.Collections][collections] namespace are untyped. However, since then,
generic data types were introduced and thus a new set of collections
were made available in the [System.Collections.Generic][generic] and
[System.Collections.ObjectModel][objectmodel] namespaces.

Recommendation

For new code, you shouldn't use non-generic collections:

  • Error prone: since non-generic collections are untyped, it requires frequent
    casting between object and the actual type you're expecting. Since the compiler
    can't check that your types are consistent, it's easier to put the wrong type in
    the wrong collection.

  • Less performant: generic collections have the advantage that value types
    don't have to be boxed as object. For instance, a List<int> stores its data
    in an int[]. That's far better than storing the data in object[] as that
    requires boxing.

The following table shows how the non-generic collection types can be
replaced by their generic counterparts from the [System.Collections.Generic][generic] or
[System.Collections.ObjectModel][objectmodel] namespaces:

Type Replacement
[ArrayList][arraylist] [List<T>][list]
[CaseInsensitiveComparer][caseinsensitivecomparer] [StringComparer.OrdinalIgnoreCase][ordinalignorecase]
[CaseInsensitiveHashCodeProvider][caseinsensitivehashcodeprovider] [StringComparer.OrdinalIgnoreCase][ordinalignorecase]
[CollectionBase][collectionbase] [Collection<T>][collection-1]
[Comparer][comparer] [Comparer<T>][comparer-1]
[DictionaryBase][dictionarybase] [Dictionary<TKey, TValue>][dictionary] or [KeyedCollection<TKey, TItem>][keyedcollection]
[DictionaryEntry][dictionaryentry] [KeyValuePair<TKey, TValue>][keyvaluepair]
[Hashtable][hashtable] [Dictionary<TKey, TValue>][dictionary]
[Queue][queue] [Queue<T>][queue-1]
[ReadOnlyCollectionBase][readonlycollectionbase] [ReadOnlyCollection<T>][readonlycollection]
[SortedList][sortedlist] [SortedList<TKey, TValue>][sortedlist-2]
[Stack][stack] [Stack<T>][stack-1]

https://github.com/dotnet/platform-compat/blob/master/docs/DE0006.md

上一篇:linux视频教程百度网盘分享,Java集合基础知识总结(绝对经典


下一篇:Spring MVC 中 直接响应渲染的页面 mvc:view-controller