改变for循环的迭代方向

San*_*ero 3 c# for-loop list

我想以这样的方式迭代一些列表项,即从特定位置开始,然后从它向左走,然后从它向右走。

换句话说,是这样的:

var items = new List<string>() { "Item1", "Item2", "Item3", "Item4", "Item5" };
string item = "Item3";

int index = items.IndexOf(item);

for (int i = index; i >= 0; i--)
    yield return items[i];

for (int i = index + 1; i < items.Count; i++)
    yield return items[i];
Run Code Online (Sandbox Code Playgroud)

结果是:Item3, Item2, Item1, Item4,Item5

有没有一种方法可以实现这一目标,但只使用一个 for 循环?

或者 LINQ 中有某种条件方向吗?

Pet*_*den 10

您可以使用三元 if 和索引上的一些简单算术来实现此目的。

for (int i = 0; i < items.Count; i++)
    yield return i <= index ? items[index - i] : items[i];
Run Code Online (Sandbox Code Playgroud)

结果:

Item3
Item2
Item1
Item4
Item5
Run Code Online (Sandbox Code Playgroud)