C# 知道foreach中第一个和最后一个循环的时间
有没有办法知道我什么时候在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(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);
}