例如,考虑一个对象列表:
List<MyClass> myList;
我有一个方法可以传递对列表中项目的两个引用。我想迭代给定项目中的所有项目(注意:我不知道列表中两个项目中哪一个排在第一位):
privat void MyFunction(MyClass listItem, MyClass anotherListItem)
{
foreach(var item in ????)
{
// do something
}
}
目前我已经解决了这个用例,如下:
int listItemIdx = myList.IndexOf(listItem);
int anotherListItemIdx = myList.IndexOf(anotherListItem);
if(listItemIdx < anotherListItemIdx )
{
for(int i = listItemIdx ; i <= anotherListItemIdx ; i++)
{
// do stuff
}
}
else
{
for (int i = anotherListItemIdx ; i < listItemIdx ; i++)
{
// do stuff
}
}
我想知道是否有更优雅、更高效或内置的解决方案来解决这个问题?
最佳答案
如果您正在寻找性能(IndexOf
两次可能会有点慢)和泛化
(当 myList
不是必需的 List<T>
而只是 IEnumerable<T>
时)您可以将其设置为
bool proceed = false;
MyClass lastItem = default;
foreach (var item in myList) {
if (!proceed) {
if (proceed = item == listItem)
lastItem = anotherListItem;
else if (proceed = item == anotherListItem)
lastItem = listItem;
}
if (proceed) {
//TODO: do staff here
if (item == lastItem)
break;
}
}
关于c# - 如何迭代两个项目之间的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71334427/