2012-05-10 114 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"; 
}