2012-05-10 67 views
0

排除最后一个元素,我在我的应用程序的循环。代码如下: -在一个循环

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

但我不想在最后Datarow添加\n。任何建议如何做到这一点?

+0

[使用每个时确定最后一个循环]的可能重复(http://stackoverflow.com/questions/1068110/identifying-last-loop-when-using-for-each ) –

回答

2

的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(); 
} 

OR

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

方案3:LINQ

ColorNames = String.Join("\n", dt.Rows.Select(dr => dr["ColorName"].ToString())); 
+1

选项3从lazyberezovsky的答案复制和粘贴? – VVS

+0

@Nikhil,选项2看起来不错。 –

+0

@No。我从我的大脑中复制并粘贴它。它的常见做法是将'DataRow'变量作为'dr'作为'DataTable'变量作为'dt'。 –

8
ColorNames = String.Join("\n", dt.Rows.Select(dr => dr["ColorName"].ToString())); 

这里更新版本(忘了投给Enumerable需要):

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

+1,但是:您需要'+ ='而不是'='来模拟原始代码行为。 – Vlad

+0

作为参考,在.NET 4起,可以通过在一个IEnumerable,所以你并不需要创建一个数组的开销。 – SimonC

+0

@Vlad:你没有。将String.Join的结果分配给ColorNames。 – VVS

0
var colorNamesList = dt.Rows 
    .Cast<DataRow>() 
    .Select(dr => dr["ColorName"].ToString()) 
    .ToArray(); 

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