使用 ICollection.转换为字典

本文关键字:字典 转换 ICollection 使用 | 更新日期: 2023-09-27 18:36:22

>我正在使用一个公开像这样的覆盖的 API

SuperAwesomeNinjaMethod(ItemToProcess item, ICollection itemProperties)
{
}

这一切都很好,除了ICollection是字典。

我该如何使用它?我想我可以传入一个列表,但我想保留项目名称和项目值之间的关联,这样我就不会神奇地从集合中挑选项目并将它们分配给项目

[编辑]

我很抱歉,我的问题显然不清楚。我的问题是,当在调用层次结构中的某个位置传递的对象是字典时,如何使用 ICollection。基本上我不知道在这种情况下通过 ICollection 枚举会通过 KeyValuePair 对象的集合进行枚举。

使用 ICollection.转换为字典

如果我正确理解了您的问题,您想将该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,如果您只需要合同。