【发布时间】:2017-09-18 13:29:50
【问题描述】:
以下是我的功能:-
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 循环时它不会进入并说 @987654330 的计数@ 是 0。然后我试图得到keyValuePairs 的Count,它也即将到来0。我不知道我做错了什么。请帮帮我。
【问题讨论】:
-
@BradleyUffner 我正在迭代 keyValuePair 而不是实际的字典。但首先它不会进入循环内部。你可以检查运行这个程序。
-
这有点令人困惑...您知道在遍历字典 (
dictCar.Where...) 时您会遍历KeyValuePair<KeyValuePair<string, string>, car>... 而不是通过您的KeyValuePair<string, string>类型的键?跨度> -
@RenéVogt 是的,你是对的。但正如我的测试表明的那样,它应该有两个值。
-
所以
keyValuePair.Key的类型是KeyValuePair<string, string>,所以我猜它永远不会是Equal和typeOfCar...顺便说一句:永远只有一个键相等。 -
我很确定将
KeyValuePair<TKey,TValue>作为字典的键是个坏主意。我不认为这符合您的期望,因为KeyValuePair的Equals(和GetHashCode)方法无法按字典键的要求工作。
标签: c# unit-testing dictionary ienumerable