我目前不得不在字典中输入一些数据,以检查某些实际数据是否与我的某些测试的预期数据相匹配。
对于这项任务,我创建了一个看起来像这样的字典:
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
。
查看字典类的引用源。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()
方法。
此调用显然会返回 false。