c# - 如何迭代两个项目之间的集合?

标签 c# list loops linq

例如,考虑一个对象列表:

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/

相关文章:

python - 希望返回所有可能的两个骰子卷。返回值是一个包含元组的列表

c# - 如何获取 Window 实例的 hWnd?

Python:找到两个列表中的第一个不匹配项

c# - 此场景需要哪些 VS 2017 RC 安装程序单个组件?

python - 更改我正在遍历的列表时的意外行为

python - 一起打印 4 个列表,元素数量不等

php - 回显 while 中 i 的变量

c++ - 中途开始循环

c# - 多线程环境中的 SQL Server 存储过程

c# - 如何以编程方式重新启动 Azure Web App