DLR:IAttributesCollection已弃用?
问题描述:
在我的代码我一直在做的功能,如:DLR:IAttributesCollection已弃用?
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 <字符串,对象>?什么是声明我的方法的首选方法?
(是否有可能在代码段粗体字?)
答
您应该切换到使用的IDictionary或IDictionary的。在IronPython 2.7中,IAttributesCollection实际上完全没了。
其原因是IAttributesCollection基本上只是一个字典,但添加了SymbolId的东西。SymbolId的东西原来是完美的perf(在添加时在各种场景中〜10%的胜利),但它主要是DLR现在拥有的呼叫站点基础设施已经过时。它也有问题,如果你动态生成SymbolId的话会导致内存泄漏。
它拥有的另一个优点是它比IDictionary更简单 - 但是当有大量有用的IDictionary实现时,引入新类型并不是什么理由。