迭代 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
。然后我尝试获取 keyValuePairs
的 Count
也即将到来 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);
}
}
以下是我的功能:-
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
。然后我尝试获取 keyValuePairs
的 Count
也即将到来 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);
}
}