gpt4 book ai didi

c# - 为什么这个 if 语句永远不会被命中?

转载 作者:太空宇宙 更新时间:2023-11-03 20:33:22 24 4
gpt4 key购买 nike

foreach (Dictionary<string, object> dictionary in listOfDictionaries)
{
if( object.Equals(dictionary, listOfDictionaries.Last() )
{
//Do something on last iteration of foreach loop.
}
}

我很快意识到我想要一个引用等于,但它仍然提出了如何不命中此代码的问题。 object.Equals 是否隐含地知道如何比较两个字典,从而返回不相等?

最佳答案

if 的正文有几种方式在这种情况下无法命中语句。

  1. listOfDictionaries是一个空集合,因此 if声明永远不会被测试。
  2. listOfDictionaries可能是生成的序列,它返回 Dictionary<string, object> 的新实例每次迭代时,元素在迭代之间不具有引用相等性。

你能在这里给我们更多的背景信息吗?也许显示 listOfDictionaries 的类型?

这是一个替代解决方案,它不需要像 .ToList 那样需要任何额外分配。

using (var e = listOfDictionaries.GetEnumerator()) {
var hasMore = e.MoveNext();
while (hasMore) {
var dictionary = e.Current;
...
hasMore = e.MoveNext();
if (!hasMore) {
// Inside this if block dictionary is the last item in listOfDictionaries
}
}
}

关于c# - 为什么这个 if 语句永远不会被命中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com