Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对循环中的最后一个序列执行不同的操作_C# - Fatal编程技术网

C# 对循环中的最后一个序列执行不同的操作

C# 对循环中的最后一个序列执行不同的操作,c#,C#,我正在寻找通过循环执行与上一次写入不同的操作的基本语法,使用C#没有特殊语法 这里只有一种可能的方法: for (int i = 0; i < n; ++i) { if (i == n - 1) { // Something special that must be done before the last iteration } // Normal iteration } for(int i=0;i

我正在寻找通过循环执行与上一次写入不同的操作的基本语法,使用C#

没有特殊语法

这里只有一种可能的方法:

for (int i = 0; i < n; ++i)
{
    if (i == n - 1)
    {
        // Something special that must be done before the last iteration
    }

    // Normal iteration
}
for(int i=0;i
什么样的循环,什么样的收集

假设它是来自
ICollection
的带有
Count
属性的东西:

for(int i=0; i < col.Count; i++)
{
    if(i == col.Count-1)
    {
        // ...
    }
}

通常,对于
T
的任何序列

bool waitingForOne = true;
T last = default(T);
foreach (T t in MySequenceOfT) // or for over whole collection or while...
{
    if (!waitingForOne)
        doSomethingWith(last);
    else
        waitingForOne = false;
    last = t;        
}
if (!waitingForOne)
    doSomethingElseWith(last);

想法是,在每次迭代中,您都会保留当前项,并对前一项做一些事情(如果有)。最后,对最后一项执行其他操作。

您应该添加一些关于IEnumerable和IQueryable的内容,以使其完整。@Candide:不确定这是否就是您的意思。如果我开始解释linq和推迟执行,我们会走得太远。哈!不远。我只是想看看你对
Count()
的引用。我同意这个想法,尽管目前的语法,将上一次迭代的逻辑移出循环会更好。经过编辑的版本会使意图更清晰。查看此链接,您将获得有关循环的完整知识如果您想做一些完全不同的事情,那么也许您应该将循环设置为少做一次迭代,然后在循环之外执行上一次迭代的工作。我很好奇不处理任何特殊的东西会是什么样子
bool waitingForOne = true;
T last = default(T);
foreach (T t in MySequenceOfT) // or for over whole collection or while...
{
    if (!waitingForOne)
        doSomethingWith(last);
    else
        waitingForOne = false;
    last = t;        
}
if (!waitingForOne)
    doSomethingElseWith(last);
        var collection = new[] { "1", "2", "3" };
        for (var i = collection.Length - 2; i > -1; i--)
        {
            // do something with
            var element = collection[i];
        }

        // now do something with
        var last = collection.Last();