DLR:IAttributesCollection已弃用?

时间:2010-11-02 21:20:43

标签: c# ironpython dynamic-language-runtime

在我的代码中,我一直在制作以下函数:

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< string,object>?声明我的方法的首选方法是什么?

(是否可以在代码部分加粗文字?)

1 个答案:

答案 0 :(得分:2)

您应该切换到使用IDictionary或IDictionary。在IronPython 2.7中,IAttributesCollection实际上已经完全消失了。

原因是IAttributesCollection基本上只是一个字典,但添加了SymbolId的东西.WillidId的东西原本对于perf来说是好的(在添加它的各种场景中大约10%的胜利)但是它已经大部分已经过时了通过DLR现在拥有的呼叫站点基础设施。它还有一个问题,如果你动态生成SymbolId,它会导致内存泄漏。

它的另一个优点是它比IDictionary更简单的API - 但是当有大量有用的IDictionary实现时,引入新类型并不是什么原因。