是否有更优雅的方式对foreach枚举中的第一个和最后一个项目进行操作而不是计数++?

Edw*_*uay 2 c# iteration foreach

在迭代一个foreach循环时,是否有更优雅的方式对第一个和最后一个项进行操作,而不是每次递增一个单独的计数器并进行检查?

例如,以下代码输出:

>>> [line1], [line2], [line3], [line4] <<<
Run Code Online (Sandbox Code Playgroud)

这需要知道你何时对第一个和最后一个项目采取行动.现在在C#3/C#4中有更优雅的方法吗?似乎我可以使用.Last()或.First()或类似的东西.

using System;
using System.Collections.Generic;
using System.Text;

namespace TestForNext29343
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            List<string> lines = new List<string>
            {
                "line1",
                "line2",
                "line3",
                "line4"
            };
            int index = 0;
            foreach (var line in lines)
            {
                if (index == 0)
                    sb.Append(">>> ");

                sb.Append("[" + line + "]");

                if (index < lines.Count - 1)
                    sb.Append(", ");
                else
                    sb.Append(" <<<");

                index++;
            }

            Console.WriteLine(sb.ToString());
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Car*_*rra 7

您可以在不进行迭代的情况下完成当前示例.

Console.WriteLine(">>> " + String.Join(lines, ", ") + " <<<);
Run Code Online (Sandbox Code Playgroud)

如果您只是迭代我发现更容易用常规for循环替换它并检查边界.

for(int i=0; i<list.count; i++)
{
  if(i == 0)
   //First one
  else if(i == list.count -1)
   //Last one
}
Run Code Online (Sandbox Code Playgroud)

它比使用.First()和.Last()扩展方法快得多.此外,如果您的列表中有两个项目,相同(字符串)值与Last或First相比将不起作用.