是否有没有唯一键的Dictionary <key,value>?</key,value>

时间:2012-07-10 08:40:35

标签: c# .net

  

可能重复:
  Duplicate keys in .NET dictionaries?

我需要创建一个Collection<string,object>,一个是字符串,另一个是对象。 我不能使用词典,因为没有一个项目是唯一的。

有没有办法创建List<T,T>?因为我不想创建一个对象来保存这两个值只是为了在单个foreach循环中使用它。

由于

6 个答案:

答案 0 :(得分:25)

试试List<Tuple<string, object>>。然后,您可以在列表中获得通常的linq支持,以获得每个Tuple<string, object>

从.NET 4开始,Tuple<,> class可用,但您可以轻松模仿自己的元组类型,而不会有太多麻烦。

我认为元组根据其项目值被认为是相等的,但是使用object这可能是引用等于,因此不应该相等......如果这有意义的话!

有关平等的更多信息:

Surprising Tuple (in)equality

<强>更新

如果您需要将项列表与键相关联以进行查找,则重复的问题答案会正确突出显示Lookup类(在您的情况下为Lookup<string, object>),这将表达你的意图比List<Tuple<string, object>>更清晰。

答案 1 :(得分:6)

你可以使用

List<KeyValuePair<string,object>>

Dictionary<string,List<object>>

答案 2 :(得分:4)

尝试创建自定义类并使用它

    class KeyValue<Tkey,TValue>
    {
       public Tkey Key {get;set;}
       public TValue Value {get;set;}
    }

使用

List<KeyValue<string,string>> list = new List<KeyValue<string,string>>();

答案 3 :(得分:4)

也许你可以使用Tuple类创建一个元组列表?像这样:

List<Tuple<String, Object>> list = new List<Tuple<String, Object>>();

答案 4 :(得分:2)

如果您使用的是.NET 4,则可以使用元组(http://msdn.microsoft.com/en-us/library/system.tuple.aspx)对象:

var list = new List<Tuple<string, object>>();

如果你使用的是早期版本的.NET,你可以自己实现Tuple类:Equivalent of Tuple (.NET 4) for .NET Framework 3.5

答案 5 :(得分:0)

您是否考虑过使用“分组依据”然后将分组结果转换为字典?