使用ICollection。转换为字典

时间:2012-06-06 15:59:59

标签: c# .net

我正在使用一个暴露像这样的覆盖的API

SuperAwesomeNinjaMethod(ItemToProcess item, ICollection itemProperties)
{

}

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

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

[编辑]

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

4 个答案:

答案 0 :(得分:0)

不确定你在这里问的是什么,但是如果你需要这种方法来区别地处理字典,你可以测试ICollection是否也是IDictionary

if (itemProperties is IDictionary)
{
    // Dictionary specific code here.
    var itemPropertiesAsDictionary = itemProperties as IDictionary;
}

答案 1 :(得分:0)

如果我正确理解了您的问题,您希望将SuperAwesomeNinjaMethod与指定的签名一起使用,对于第二个参数,您希望传递System.Collections.Generic.Dictionary<TKey, TValue>的实例,对吧?

Dictionary类实现ICollection接口,因此您只需传递Dictionary实例即可。您将收到KeyValuePair<TKey, TValue>

的集合

答案 2 :(得分:0)

问题是什么?您是否在询问如何将字典传递给需要ICollection的方法?该方法是否需要一个项目列表或一个转换为ICollection的字典?

在任何情况下Dictionary<>都会实现ICollection,因此您不应该按原样传递它。如果您想传递密钥或值,也可以使用KeysValues属性。它们都实现了ICollection。

以下调用将成功,无需进行任何类型转换:

        var dict = new Dictionary<string, string> {{"aKey", "aValue"}};
        var item = new ItemToProcess();

        SuperAwesomeNinjaMethod(item,dict);
        SuperAwesomeNinjaMethod(item, dict.Keys);
        SuperAwesomeNinjaMethod(item, dict.Values);

答案 3 :(得分:0)

您是否尝试过对字典进行类型转换?

SuperAwesomeNinjaMethod(ItemToProcess item, ICollection itemProperties)
{
    // Just pretending your dictionary is string, string...
    var myDictionary = (Dictionary<string string>)itemProperties;

    // ... carry on...

}

如果您需要的只是合同,您也可以转发IDictionary