DLR: IAttributesCollection устарела? - PullRequest
       7

DLR: IAttributesCollection устарела?

1 голос
/ 03 ноября 2010

В моем коде я делал такие функции, как:

public void Foo([ParamsDictionary] IAttributesCollection kwargs) {}

Но мне стало любопытно. Что все реализует этот интерфейс? Поэтому я вытащил исходник IronPython. В нем я нашел этот файл:

Src\Runtime\Microsoft.Scripting\Runtime\ParamDictionaryAttribute.cs

В строках 24-30 есть это:

/// Most languages which support params dictionaries will support the following types:
///     IDictionary<string, anything>
///     IDictionary<object, anything>
///     Dictionary<string, anything>
///     Dictionary<object, anything>
///     IDictionary
///     IAttributesCollection (deprecated)

Обратите внимание на устаревшую строку. Разве я не должен использовать подпись метода, которую я имел выше, и вместо этого использовать IDictionary ? Какой способ объявления моих методов является предпочтительным?

(Можно ли выделить текст в разделах кода?)

1 Ответ

2 голосов
/ 03 ноября 2010

Вы должны перейти на использование IDictionary или IDictionary. В IronPython 2.7 IAttributesCollection фактически полностью отсутствует.

Причиной этого является то, что IAttributesCollection в основном представляет собой словарь, но с добавленным материалом SymbolId. Материал SymbolId изначально подходил для perf (~ 10% выигрыша в различных сценариях, когда он был добавлен), но в основном он устарел инфраструктурой сайта вызовов теперь есть DLR. Проблема также в том, что если вы генерируете SymbolId динамически, это вызывает утечку памяти.

Другое преимущество, которое он имел, состояло в том, что это был более простой API, чем IDictionary - но это не является большой причиной для введения нового типа, когда есть множество полезных реализаций IDictionary.

...