即使我在添加之前检查地图是否已经包含密钥,我收到此错误..
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));
有什么想法?谢谢!
答案 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