迭代 KeyValuePair(作为字典中的键)不起作用

Iterating over KeyValuePair (as a key in dictionary) is not working

以下是我的功能:-

public void deleteAllCarsWithType(Dictionary < KeyValuePair<string, string> , car > dictCar, string typeOfCar)
{
  var keyValuePairs = dictCar.Where(keyValuePair => keyValuePair.Key.Equals(typeOfCar));

  //var count = keyValuePairs.Count();
  //this also gives the size of keyValuePairs as 0.

  foreach (var keyValuePair in keyValuePairs)
  {
    dictCar.Remove(keyValuePair.Key);
  }
} 

KeyValuePair<string, string> 是字典的键,carType 是键,carModel 是汽车的型号。

当我运行对它进行单元测试时

[TestMethod]
public void DeleteSameCarTypeTest()
{
  Dictionary<KeyValuePair<string, string>, car> Dictionary = new Dictionary<KeyValuePair<string, string>, car>();
  Dictionary.Add(new KeyValuePair<string, string>("x", "y"), new car());
  Dictionary.Add(new KeyValuePair<string, string>("x", "z"), new car());

  new Program().deleteAllCarsWithType(Dictionary, "x");
  Assert.AreEqual(0, Dictionary.Count);
}

它失败了,说预期 0 和实际 2

当我调试它时,我发现 keyValuePairs 具有预期的两个值(与 carType "x" 一起)但是当我进入 foreach 循环时它不会并说 keyValuePairs 的计数是 0。然后我尝试获取 keyValuePairsCount 也即将到来 0。我不知道我做错了什么。请帮帮我。

您正在查看值而不是键。

将您的代码更改为:

private static void deleteAllCarsWithType(Dictionary<KeyValuePair<string, string>, car> dictCar, string typeOfCar)
{
    var keyValuePairs = dictCar.Keys.Where(keyValuePair => keyValuePair.Key.Equals(typeOfCar)).ToArray();

    foreach (var keyValuePair in keyValuePairs)
    {
        dictCar.Remove(keyValuePair);
    }               
}

请注意,我还将查询转换为数组。否则循环将失败,因为您修改了集合。

keyValuePair.Key 是一个键值对。 您需要:

var keyValuePairs = dictCar.Where(keyValuePair => keyValuePair.Key.Key.Equals(typeOfCar));

事实上,正如其他人指出的那样,还需要进行一些更改:

private static void deleteAllCarsWithType(Dictionary<KeyValuePair<string, string>, car> dictCar, string typeOfCar)
{
    var keyValuePairs = dictCar.Where(keyValuePair => keyValuePair.Key.Key.Equals(typeOfCar)).ToArray();

    foreach (var keyValuePair in keyValuePairs)
    {
        dictCar.Remove(keyValuePair.Key);
    }               
}