Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DLR:IAttributesCollection已弃用?_C#_Ironpython_Dynamic Language Runtime - Fatal编程技术网

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有大量有用的实现时,这并不是引入新类型的理由