您应该避免使用的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
那么会引发InvalidCastException
。 List<char>
通常不需要,因为您知道列表中只能有chars
,而ArrayList可以有任何对象类型。根据意见
线new string((char[])myArrayList.ToArray(typeof(char))
更新2可以分解。
首先,我们使用的方法ToArray()
myArrayList.ToArray();
但是转换ArrayList
到Array
,我们要告诉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
块)。
你能。尝试一些下面的答案或使用StringBuffer:var buff = new StringBuffer(); foreach(...){buff.Append(value);} tb_output.Text = buff.ToString(); StringBuffer应该比连接速度快+。 – pasty