我目前不得不在字典中放入一些数据,以检查是否有一些实际数据与我的一些测试中的预期数据匹配。
对于这个任务,我创建了一个看起来像这样的词典:
Dictionary<string, string> dict = new Dictionary<string, string>(){
{a, a},
{b, b},
{c, c}
};
if(dict.Keys.Equals(dict.Values)) {
///// received false as a result here //////
}
foreach (var item in dict) {
if (item.Key.Equals(item.Value))
{
///// received true as a result /////
}
else { other code here }
}
为什么我得到第一种方法的错误结果?
如果你看看ICollection
,你期望他们都是docs.
看看字典类的reference source。 Keys
和Values
属性使用不同的集合类型实现。
// Line 135
public KeyCollection Keys {
get {
Contract.Ensures(Contract.Result<KeyCollection>() != null);
if (keys == null) keys = new KeyCollection(this);
return keys;
}
}
// Line 157
public ValueCollection Values {
get {
Contract.Ensures(Contract.Result<ValueCollection>() != null);
if (values == null) values = new ValueCollection(this);
return values;
}
}
此外,如果你查看KeyCollection
和ValueCollection
类,你会注意到,没有其他实现的Equals()
方法。由于这些类不是来自任何其他类,您可能确定dict.Keys.Equals(dict.Values)
将调用object.Equals()
Method。
此调用显然会返回false。