如何跳过c sharp中每个循环的特定位置?

Ger*_*ero 10 c# foreach loops

List<string> liste = new List<String> 
        {
            "A","B","C","D"
        };

        foreach (var item in liste)
        {
            System.Diagnostics.Debug.WriteLine(item.ToString());
        }

        for (int i = 0; i < liste.Count; i++)
        {
            if (i == 0)
                continue;
            System.Diagnostics.Debug.WriteLine(liste[i].ToString());
        }
Run Code Online (Sandbox Code Playgroud)

如何跳过foreach循环中的特定位置?我不想评估任何值,只是跳过位置x.

它必须是一个特定的位置.可以选择位置0或位置7.

Eli*_*ing 20

跳过列表中的第一项非常容易:

foreach(var item in list.Skip(1))
{
    System.Diagnostics.Debug.WriteLine(item.ToString());
}
Run Code Online (Sandbox Code Playgroud)

如果你想在索引处跳过任何其他元素n,你可以这样写:

foreach(var item in list.Where((a,b) => b != n))
{
    System.Diagnostics.Debug.WriteLine(item.ToString());
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我使用一个带有两个参数的lambda表达式:ab.参数a是项本身,而参数b是项的索引.

MSDN上描述这些扩展方法的相关页面是:

您甚至可以编写自己的扩展方法,允许您跳过列表中的元素:

public static class MyEnumerableExtensions
{
    public static IEnumerable<T> SkipAt<T>(this IEnumerable<T> list, int index)
    {
        var i = 0;

        foreach(var item in list) 
        {
            if(i != index)
                yield return item;

            i++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许你写这样的东西来跳过一个项目:

foreach(var item in list.SkipAt(2))
{
    System.Diagnostics.Debug.WriteLine(item.ToString());
}
Run Code Online (Sandbox Code Playgroud)