Дженерики и система. Наборы

Вам нужно проанализировать текст JSON:

import json
array = json.loads(r)
print array[0]
8
задан Cameron MacFarland 30 November 2008 в 12:09
поделиться

4 ответа

По большей части универсальные наборы будут работать быстрее, чем неуниверсальный дубликат и приносить Вам пользу наличия набора со строгим контролем типов. Сравнение наборов, доступных в Системе. Наборы и Система. Наборы. Универсальный, Вы получаете следующую "миграцию":

    Non-Generic               Generic Equivalent
    ------------------------------------------------------------
    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 (use IEnumerable<T> or anything that extends it)
    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.

12
ответ дан 5 December 2019 в 14:07
поделиться

При некоторых обстоятельствах универсальные контейнеры работают лучше, чем старые. Они должны, по крайней мере, работать, а также старые при всех обстоятельствах. И они помогают поймать программные ошибки. Это - редкая комбинация более полезной абстракции и лучшей производительности, таким образом, нет большой части причины избежать их. Только если Вы вынуждены к вшивой библиотекой, необходимо работать с этим, был записан перед дженериками.

0
ответ дан 5 December 2019 в 14:07
поделиться

Я видел интервью с Anders Hejlsberg от c# команды, и его спросили, было ли что-нибудь, о чем он сожалел с предыдущими выпусками .NET. Наличие дженериков в asp.net 1.0 было первой вещью, которую он упомянул. Наличие его там означало, что они должны были реализовать обходные решения, которые будут придерживаться библиотек .NET и скоро станут унаследованным кодом.

Я никогда не использую Систему. Пространство имен наборов и от его оператора это, кажется, корректный путь.

0
ответ дан 5 December 2019 в 14:07
поделиться

О единственной плохой вещи я могу думать, когда использование Дженериков является различием, так например, если у Вас есть a List<Person> и Вы хотите передать его методу, который берет List<object> Вы не можете потому что List<Person> не может быть брошен к List<object> непосредственно.

Эта проблема решена в.NET 4.0.

0
ответ дан 5 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: