2013-06-12 71 views
1

只是一個非常小的問題。如何將數組列表項存儲在字符串中

我有一個數組列表命名li,我的條件後,我有內容爲:

li[0]="s"; 
li[1]="a"; 
li[2]="h"; 
li[3]="i"; 
li[4]="4"; 

現在我寫的代碼爲:

foreach (string value in li) 
{ 
    tb_output.Text = li.ToString(); 
} 

在這裏,我想對於每個列表項,元素應該存儲在一個字符串中,我想在文本框中顯示它。但我無法在tb_output中獲得「sahil」。

你能告訴我我錯了嗎?我無法接受。我是初學者,所以對我來說是一種麻煩。

+0

你能。嘗試一些下面的答案或使用StringBuffer:var buff = new StringBuffer(); foreach(...){buff.Append(value);} tb_output.Text = buff.ToString(); StringBuffer應該比連接速度快+。 – pasty

回答

1

其他的答案應該適用於特定的問題,但是,如果你想寫入該文本框的內容,你應該做的,而不是它以這種方式。

string word = ""; 
foreach(string s in li) 
{ 
    word += s; 
} 
tb_output.Text = s; 

這樣,每次向陣列寫入數據時都會清除文本框。

更重要的是,特別是如果正在處理一個大陣,提高使用的StringBuilder(你可以通過添加得到表現「使用System.Text;」你的文件的頂部

StringBuilder stb = new StringBuilder(); 
foreach(string s in li) 
{ 
    stb.Append(s); 
} 
tb_output.Text = stb.ToString(); 
+0

獲取異常,, 無法將類型爲「System.Char」的對象轉換爲鍵入「System.String」。 – user2387900

+0

@ user2387900您在描述中的代碼將分配給數組上的索引,如下所示:li [0] =「s」;這似乎表明你正在使用一個字符串數組。你是否使用了一個char數組,其代碼如下:li [0] ='s'; ? – dkoch74

+0

它的工作,,,非常感謝 – user2387900

8

如果lichar[],用tb_output.Text = new String(li)

如果liList<char>,使用tb_output.Text = new String(li.ToArray())

如果listring[]List<string>,使用tb_output.Text = String.Concat(li)

否則,如果li包含char S,使用tb_output.Text = new String(li.Cast<char>().ToArray())

否則,如果li包含string,使用tb_output.Text = String.Concat(li.Cast<string>())

+0

「tb_output.Text = String.Join(」「,li)」,getting-- System.Collections.ArrayList For「tb_output.Text = String.Join(」「,li.Cast ())」 --getting-- 無法投射物體o f鍵入'System.Char'鍵入'System.String'。 – user2387900

+2

在沒有分隔符的情況下使用'Join'沒有意義。只需使用'Concat'。這就是爲什麼'Concat'存在。 – Servy

+0

編輯。往上看。 –

0

您需要+ =

foreach (string value in li) 
{ 
    tb_output.Text += li.ToString(); 
} 
+0

獲取----無法轉換類型'System.Char'的對象類型'System.String'....在foreach(字符串值在li)線...我不知道在哪裏進行 – user2387900

2

如何追加約試圖

foreach (string value in li) 
{ 
    tb_output.Text += value; 
} 
+0

獲取--- System.Collections.ArrayList – user2387900

3

您應該避免使用的ArrayList只要有可能。使用List<char>char[]陣列。我已經使用char,因爲您只持有chars,但如果您要使用多個字符,則可以將其更改爲string

隨着字符數組,可以簡單地做到這一點

string myString = new string(li); 

或者,也可以簡單地使用String.Concat方法和通過在列表或數組。

tb_output.Text = String.Concat(myArrayOrList); 

更新澄清評論

如果你想使用List<T>的,你可以做到這一點。

List<char> li = new List<char>() { 's', 'a', 'h', 'i', 'l' }; 
tb_output.Text = String.Concat(li); 

如果你真的必須使用ArrayList這裏,那麼你可以在ArrayList的簡單轉換成字符數組,並使用上述(new string(myCharArray)

try 
{ 
    tb_output.Text = new string((char[])myArrayList.ToArray(typeof(char))); 
} 
catch(InvalidCastException ex) 
{ 
    //handle any problems with the casting 
} 

描述的第一個方法我已經添加了try..catch因爲如果數組列表中有一個元素不能投射到char那麼會引發InvalidCastExceptionList<char>通常不需要,因爲您知道列表中只能有chars,而ArrayList可以有任何對象類型。根據意見

new string((char[])myArrayList.ToArray(typeof(char))

更新2可以分解。

首先,我們使用的方法ToArray()

myArrayList.ToArray(); 

但是轉換ArrayListArray,我們要告訴ToArray方法對每個對象轉換內部到ArrayList到char因爲,此刻,ArrayList持有object類型而不是char類型。所以我們將這些信息傳遞給方法。

myArrayList.ToArray(typeof(char)); 

我們可以通過做

string newString = new string(arrayOfChars); 

目前創建字符數組一個新的字符串我們從ToArray方法的Array但這裏的string構造函數需要字符數組(char[] ),所以我們投,我們有一個char[]Array這就是爲什麼我們有

(char[])myArrayList.ToArray(typeof(char)); 

所以我們現在有一個來自原始ArrayList的char[],並且可以將它傳遞給構造函數string

new string((char[])myArrayList.ToArray(typeof(char))); 

您還沒有給出爲什麼您使用的是ArrayList但你必須處理潛在的性能問題和鑄造例外,因爲你可能不小心將物體放入ArrayList的一個原因,可以」 t轉換爲char(這就是爲什麼我們有Try..Catch塊)。

+0

System.Collections.ArrayList在文本框中返回。沒有得到 – user2387900

+1

你有使用'ArrayLists'的原因嗎?它們已經過時,並且在大多數情況下,只有在您將目標鎖定在.Net 2之後才能使用。0或使用遺留代碼。你應該使用'List '或者一個普通的數組。列表更像是一個ArrayList,因爲您不需要事先知道大小,並且可以繼續添加更多元素。 – keyboardP

+0

tb_output.Text = new string((char [])myArrayList.ToArray(typeof(char))); ...我通過這條線得到了答案..但我沒有理解人的線..你可以解釋我.. – user2387900

0

您可以使用String.Join方法來加入數組中的所有元素。

它有兩個參數,第一個參數是:「加入什麼?」,您可以加入元素並用逗號分隔它們。第二個參數是你的IEnumerable<T>,你可以加入List<T>的元素以及任何來自IEnumerable<T>的元素。

所以,你可以做

tb_output.Text = String.Join("", li); 

這將返回字符串sahi4,因爲我們有一個空字符串加入陣列。

或者您可以使用String.ConcatkeyboardP已經提到。

tb_output.Text = String.Concat(li); 

這將連接所有值。可以使用StringBuilder來構建字符串。

StringBuilder b = new StringBuilder(); 
foreach (string value in li) 
{ 
    sb.Append(value); 
} 
tb_output.Text = sb.ToString(); // returns the built string 

的foreach將時間從li數組中返回一個元素並投入value當你將它命名。而不是試圖用li.ToString()將數組轉換爲字符串的foreach裏面,你應該使用value獲得在每個位置上的串...

另外,如果你是連接字符串,你應該在同類個案使用StringBuilder這些,但您也可以使用運營商+

stringA = stringA + "B"; // or 
stringA += "B"; 
+0

沒有分隔符使用'Join'沒有意義。只需使用'Concat'。這就是爲什麼'Concat'存在。 – Servy

+0

獲取----無法投入'System.Char'類型的對象以鍵入'System.String'....在foreach(字符串值在li)行... 我不知道在哪裏進行 – user2387900

+0

@ user2387900將字符串值更改爲字符值 – BrunoLM

相關問題