C# DLR:IAttributesCollection已弃用?
在我的代码中,我创建了如下函数:C# DLR:IAttributesCollection已弃用?,c#,ironpython,dynamic-language-runtime,C#,Ironpython,Dynamic Language Runtime,在我的代码中,我创建了如下函数: public void Foo([ParamsDictionary] IAttributesCollection kwargs) {} 但我很好奇。是什么实现了这个接口?所以我下载了IronPython的源代码。我在其中找到了这个文件: Src\Runtime\Microsoft.Scripting\Runtime\ParamDictionaryAttribute.cs 在第24-30行,它有以下内容: /// Most languages which su
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的东西最初在性能上还可以(添加时在各种场景中赢得约10%),但DLR现在拥有的呼叫站点基础设施使其大部分过时。它还有一个问题,即如果动态生成symbold,则会导致内存泄漏 它的另一个优点是,它是一个比IDictionary更简单的API——但当IDictionary有大量有用的实现时,这并不是引入新类型的理由