2016-09-09 234 views
2

我正在循環訪問DataSet的行和列,以便使用管道分隔符寫入文本文件。我有它的工作,除了我需要離開最後一欄的管道。有沒有辦法讓我調整循環來遍歷fields.count-1,然後引用循環之外的最後一個字段?循環訪問數據集

foreach (object item in row.ItemArray) 
{ 
    d = d+ item.ToString() + "|"; 
} 
+5

'String.Join(「|」,row.ItemArray)'? –

+0

您在循環的行中是否有空值? – Steve

+0

@PanagiotisKanavos添加答案。它比另外兩個已經增加了。 – Will

回答

6

您可以加入任何的IEnumerable(包括數組)的使用String.Join的內容,如:

var newText = String.Join("|",row.ItemArray); 
1

您可以使用LINQ總結:

d = row.ItemArray.Aggregate((x, y) => x.ToString() + "|" + y.ToString()); 
+0

這比String.Join()更簡單嗎?不是迂腐,只是詢問String.Join()是否有問題。 – Overhed

+0

沒有,我只是沒有想到這一點。 –

+0

Gotcha。看起來LINQ真的可以做所有事情。 :) – Overhed

1

您可以使用TrimEnd(Char[])方法類似

d.TrimEnd(new char[]{'|'}); 
1

您可以使用:

string.Join("|", row.ItemArray); 
0

循環後:

d = d.remove(d.Count()-1); 

這將刪除您的字符串的最後一個字符。

1

您可以只使用string.Join方法,如下所示:

string.Join("|", row.ItemArray); 

但是,如果你在foreach循環做其他的邏輯,以及,考慮使用StringBuilder代替。這在重複連接字符串方面有巨大的性能提升。然後,您可以通過調整它的長度來簡單修剪最終的管道。

var d = new StringBuilder(); 
foreach (object item in row.ItemArray) 
    d.Append(item.ToString()).Append("|"); 

d.Length -= 1; 
+1

有沒有必要調用'ToString()'或'ToArray()' –

+0

是的,出於某種原因,我總是我以爲我只需要傳遞一個'string []',我已經更新了我的答案。 – entropic

+0

IEnumerable支持被添加到4.0我認爲。花了我幾年時間來認識到這一點。我想我通過SO問題意識到它...... –

0
for(int i = 0; i < row.ItemArray.Length; i ++) 
{ 
    if(row.ItemArray[i] == row.itemArray[row.itemArray - 1]) 
    { 
     d = d+ item.ToString(); 
    } 
    else 
    { 
    d = d+ item.ToString() + "|"; 
    } 
} 
0

只添加一個分隔符,如果你增加一個值。

for(int i = 0; i < row.ItemArray.Length; i ++) 
{ 
    if(d.length == 0) 
    { 
     d = item.ToString(); 
    } 
    else 
    { 
     d = d + "|" + item.ToString(); 
    } 
}