2013-06-12 68 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

相关问题