使用 ICollection.转换为字典
本文关键字:字典 转换 ICollection 使用 | 更新日期: 2023-09-27 18:36:22
>我正在使用一个公开像这样的覆盖的 API
SuperAwesomeNinjaMethod(ItemToProcess item, ICollection itemProperties)
{
}
这一切都很好,除了ICollection
是字典。
我该如何使用它?我想我可以传入一个列表,但我想保留项目名称和项目值之间的关联,这样我就不会神奇地从集合中挑选项目并将它们分配给项目。
[编辑]
我很抱歉,我的问题显然不清楚。我的问题是,当在调用层次结构中的某个位置传递的对象是字典时,如何使用 ICollection。基本上我不知道在这种情况下通过 ICollection 枚举会通过 KeyValuePair 对象的集合进行枚举。
如果我正确理解了您的问题,您想将该SuperAwesomeNinjaMethod
与指示的签名一起使用,对于第二个参数,您想传递System.Collections.Generic.Dictionary<TKey, TValue>
的实例,对吧?
Dictionary
类实现 ICollection
接口,因此您只需传递Dictionary
实例即可。您将获得一系列KeyValuePair<TKey, TValue>
不确定你在这里问的是什么,但如果你需要这个方法来以不同的方式处理字典,你可以测试一下ICollection
是否也是一个IDictionary
:
if (itemProperties is IDictionary)
{
// Dictionary specific code here.
var itemPropertiesAsDictionary = itemProperties as IDictionary;
}
问题是什么?您是在问如何将字典传递给需要 ICollection 的方法吗?该方法是否需要项目列表或字典强制转换为 ICollection?
在任何情况下,Dictionary<> 都实现了 ICollection,因此按原样传递它应该没有问题。如果要传递键或值,也可以使用键和值属性执行此操作。它们都实现了ICollection。
以下调用将在没有任何类型转换的情况下成功:
var dict = new Dictionary<string, string> {{"aKey", "aValue"}};
var item = new ItemToProcess();
SuperAwesomeNinjaMethod(item,dict);
SuperAwesomeNinjaMethod(item, dict.Keys);
SuperAwesomeNinjaMethod(item, dict.Values);
您是否尝试过将类型转换为字典?
SuperAwesomeNinjaMethod(ItemToProcess item, ICollection itemProperties)
{
// Just pretending your dictionary is string, string...
var myDictionary = (Dictionary<string string>)itemProperties;
// ... carry on...
}
您也可以键入IDictionary
,如果您只需要合同。