C#已添加具有相同密钥的项目

时间:2015-08-21 07:41:10

标签: c# .net

即使我在添加之前检查地图是否已经包含密钥,我收到此错误..

props

GetTuple方法:

if (ShortBuffer.ContainsKey(GetTuple(data))) return;
ShortBuffer.Add(GetTuple(data),                 <----- ERROR OCCURS HERE
    new Tuple<Timer, int, bool, Data>(
        new Timer(Convert.ToInt32(Ini.ReadValue("intervals", "clientbuffershort"))), 0, false, data));

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:1)

首先,GetTuple方法每次调用它时都会返回一个新实例。它可能包含相同的数据,但它们仍然是不同的对象。所以我要做的第一步是将代码更改为:

var tuple = GetTuple(data);
if (ShortBuffer.ContainsKey(tuple)) return;

ShortBuffer.Add(tuple, new Tuple<Timer, int, bool, Data>(
    new Timer(Convert.ToInt32(Ini.ReadValue("intervals", "clientbuffershort"))), 0, false));

这确保您至少比较并将完全相同的对象添加到地图中。

第二,确保Tuple类实现IEquatable<T>接口。这样,您可以确保比较Tuple对象的内容,而不是对象存储位置的内存地址(因为它们彼此不同)。有关如何实施IEquatable<T>界面的更多信息,请访问:https://msdn.microsoft.com/en-us/library/ms131187(v=vs.110).aspx