29

可能重复:
.NET 字典中的重复键?

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

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

谢谢

4

6 回答 6

33

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

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

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

更多关于平等的信息:

令人惊讶的元组(不)等式

更新:

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

于 2012-07-10T08:43:03.820 回答
11

您可以使用

List<KeyValuePair<string,object>>

或者

Dictionary<string,List<object>>
于 2012-07-10T08:43:30.827 回答
4

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

List<Tuple<String, Object>> list = new List<Tuple<String, Object>>();
于 2012-07-10T08:43:56.393 回答
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>>();
于 2012-07-10T08:43:21.620 回答
2

如果您使用的是 .NET 4,则可以使用 Tuple ( 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

于 2012-07-10T08:46:49.607 回答
0

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

于 2012-07-10T08:45:31.413 回答