C# 知道foreach中第一个和最后一个循环的时间

C# 知道foreach中第一个和最后一个循环的时间,c#,C#,有没有办法知道我什么时候在foreach的第一个和最后一个循环中 foreach(string str in list){ if(str.isFirst(list) == true){...} if(str.isLast(list) == true){...} } ^类似这样的内容?for(inti=0;i=list.Length-1) { //这是最后一次迭代 } } 使用计数器 int i = 0; foreach(string str in list) { if(i

有没有办法知道我什么时候在foreach的第一个和最后一个循环中

foreach(string str in list){
  if(str.isFirst(list) == true){...} 
  if(str.isLast(list) == true){...} 
}
^类似这样的内容?

for(inti=0;ibool first = true;    
foreach(string str in list)
{
  if(first) 
  {
      //do something
      first = false;
  } 
}
{ 如果(i==0) { //这是第一次迭代 } 如果(i>=list.Length-1) { //这是最后一次迭代 } } 使用计数器

int i = 0;
foreach(string str in list)
{
   if(i == 0) { /* first */ }
   if(i == list.Count - 1)  { /* last */ }
   i++;
}

检查您是否正在处理第一项或最后一项的最简单方法是以下代码:

void Process(string[] strings)
{
    for (int i = 0; i < strings.Length; i++)
    {
        var s = strings[i];

        bool isFirst = i == 0;
        bool isLast = i == strings.Length - 1;
    }
}
void进程(字符串[]字符串)
{
for(int i=0;i
替代方法

foreach(var kv in list.ToDictionary(k => list.IndexOf(k), v => v))
{
    if (kv.Key == 0) Console.WriteLine("First is {0}", kv.Value);
    if (kv.Key == list.Count - 1) Console.WriteLine("Last is {0}", kv.Value);
}

最好的选择是一个for()循环

我会使用一个索引for循环来实现这一点。
foreach
只知道当前项。顺便说一句,正如@TimSchmelter所建议的,已经有非常类似的问题,下面显示了对于
IEnumerable
的“is last”的非常好的实现,它可以很容易地适应“is first”。在实现时,请确保为0和1案例定义您想要的行为。这回答了一半的问题。是的,这会起作用。但是,如果您要维护计数器,您最好只使用
for
循环。按照问题的措辞,这可能是迄今为止提出的最佳解决方案,尽管标准
for
循环更有意义。哦,好吧,我猜是这样的
foreach(var kv in list.ToDictionary(k => list.IndexOf(k), v => v))
{
    if (kv.Key == 0) Console.WriteLine("First is {0}", kv.Value);
    if (kv.Key == list.Count - 1) Console.WriteLine("Last is {0}", kv.Value);
}