我目前不得不将一些数据放入字典中,以检查一些实际数据是否与我的一些测试的预期数据相匹配。
为了这个任务,我创建了一个看起来像这样的字典:
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 } }
为什么我用第一种方法得到了错误的结果?
最佳答案
如果您查看 docs.
,您希望它们都是ICollection
查看字典类的 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。
关于c# - 为什么比较每个 C# 字典键/值对给出不同的结果,而不是一次完成比较字典键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490363/