C# 排除循环中的最后一个元素

C# 排除循环中的最后一个元素,c#,loops,C#,Loops,我的应用程序中有一个循环。代码如下:- foreach (DataRow dr in dt.Rows) ColorNames +=dr["ColorName"].ToString() + "\n"; 但我不想在最后一个数据行添加\n。有什么建议吗?Foreach不适用于索引 选项1:ForEach循环 使用foreach循环。循环直到最后一个循环,外循环是否喜欢 ColorNames.Substring(0, ColorNames.Length-1); 选项2:For循环 使用for

我的应用程序中有一个循环。代码如下:-

foreach (DataRow dr in dt.Rows)
    ColorNames +=dr["ColorName"].ToString() + "\n";

但我不想在最后一个数据行添加\n。有什么建议吗?

Foreach不适用于索引

选项1:ForEach循环

使用foreach循环。循环直到最后一个循环,外循环是否喜欢

ColorNames.Substring(0, ColorNames.Length-1);
选项2:For循环

使用for循环并检查循环内所有索引的索引,直到最后一个。添加\n而在最后一个索引中不添加\n

for (int i = 0; i < dt.Rows.Count; i++)
{
   ColorNames += i < dt.Rows.Count-1 
           ? dr["ColorName"].ToString() + "\n"
           : dr["ColorName"].ToString();
}

Foreach不处理索引

选项1:ForEach循环

使用foreach循环。循环直到最后一个循环,外循环是否喜欢

ColorNames.Substring(0, ColorNames.Length-1);
选项2:For循环

使用for循环并检查循环内所有索引的索引,直到最后一个。添加\n而在最后一个索引中不添加\n

for (int i = 0; i < dt.Rows.Count; i++)
{
   ColorNames += i < dt.Rows.Count-1 
           ? dr["ColorName"].ToString() + "\n"
           : dr["ColorName"].ToString();
}
以下是需要强制转换为可枚举的更新版本:

ColorNames = String.Join("\n", dt.AsEnumerable().Select(dr => dr.Field<string>("ColorName")));
以下是需要强制转换为可枚举的更新版本:

ColorNames = String.Join("\n", dt.AsEnumerable().Select(dr => dr.Field<string>("ColorName")));

+1,但是:您需要+=而不是=来模拟原始代码行为。作为参考,在.NET 4以后的版本中,您可以传入IEnumerable,因此您不需要创建数组的开销。@Vlad:您不需要。您将String.Join的结果分配给ColorNames。@VVS:不完全是。假设ColorNames在代码开始之前是非空的。@Vlad如果它不是空的,那么您是对的,应该使用+=。但我认为赋值正是他所需要的+1,但是:您需要+=而不是=来模拟原始代码行为。作为参考,在.NET 4以后的版本中,您可以传入一个IEnumerable,因此您不需要创建数组的开销。@Vlad:您不需要。您将String.Join的结果分配给ColorNames。@VVS:不完全是。假设ColorNames在代码开始之前是非空的。@Vlad如果它不是空的,那么您是对的,应该使用+=。但我认为作业是他所需要的。从拉兹别列佐夫斯基的答案中复制并粘贴选项3?@Nikhil,选项2似乎很好。@不。我是从我的大脑中复制并粘贴的。通常的做法是,DataRow变量被视为dr,就像DataTable变量被视为dt一样。选项3复制并粘贴lazyberezovsky的答案?@Nikhil,选项2似乎很棒。@不,我是从大脑复制并粘贴的。它的常见做法是将DataRow变量作为dr,就像将DataTable变量作为dt一样
var colorNamesList = dt.Rows
  .Cast<DataRow>()
  .Select(dr => dr["ColorName"].ToString())
  .ToArray();

var colorNames = String.Join("\n", colorNames);
int count = 0;
foreach (DataRow dr in dt.Rows)
{
    count++;
    ColorNames +=dr["ColorName"].ToString();
    if (count < dt.Rows.Count)
        ColorNames += "\n";
}