寻找一个linq解决方案来取代for循环

Whi*_*uit 3 c# linq

我总是遇到这样的例子.在这种情况下,我想在一个先前加载的名为files的变量中为每个FileInfo对象填充一个带有新行的stringbuilder ,当然这包含一堆FileInfo对象.对于第一个对象,我想在文本之后添加FIRST,然后为我要添加NOTFIRST的其他内容添加.要使用forloop执行此操作,我必须设置一个计数器,执行if语句并递增计数器.

我已经学会了足够的linq,它在我的手指尖,但我知道必须有一个优雅的 LINQ解决方案.

            var mysb = new StringBuilder();
            var count = 0;
            string extra;
            foreach (System.IO.FileInfo fi in files)
            {
                var newLine = fi.Name;
                if (count == 0)
                    extra = "FIRST";
                else
                    extra= "NOTFIRST";
                count = count++;
                mysb.AppendLine(string.Format("({0} {1})", newLine, extra));
            }
Run Code Online (Sandbox Code Playgroud)

Pet*_*iho 7

就个人而言,我会放弃LINQ并坚持使用你所拥有的,更简单的方法:

var mysb = new StringBuilder();
foreach (FileInfo fi in files)
{
    string extra = mysb.Length == 0 ? "FIRST" : "NOTFIRST";
    mysb.Append(fi.Name);
    mysb.AppendLine(extra);
}
Run Code Online (Sandbox Code Playgroud)

(我不清楚为什么你将文件名视为有效的格式字符串...当然,如果它确实一个有效的格式字符串,你可以改变我的两个调用,Append()然后再AppendLine()回到单个调用string.Format())