如何在字符串中存储arraylist项目

时间:2013-06-12 21:02:22

标签: c# asp.net

只是一个非常小的问题。

我有一个名为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”。

你能说出我错在哪里吗?我无法接受它。我是初学者,所以对我来说这是一种麻烦。

6 个答案:

答案 0 :(得分: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,请使用tb_output.Text = new String(li.Cast<char>().ToArray())

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

答案 1 :(得分:3)

尽可能避免使用ArrayLists。使用List<char>char[]数组。我使用了char,因为您只持有chars,但如果您要使用多个字符,则可以将其更改为string

使用char数组,您只需执行此操作

string myString  = new string(li);

或者,您可以简单地使用String.Concat方法并传入List或Array。

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
}

我为ArrayList添加了一个try..catch块,因为如果数组列表中有一个元素无法转换为char,则抛出InvalidCastExceptionList<char>通常不需要这样做,因为您知道列表中只能包含chars,而ArrayList可以包含任何对象类型。

根据评论更新2

new string((char[])myArrayList.ToArray(typeof(char))可以细分。

首先,我们使用ToArray()方法将ArrayList转换为Array

myArrayList.ToArray();

但是,我们想告诉ToArray方法将内部的每个对象转换为char,因为此时,ArrayList保持object个类型,而不是{ {1}}类型。所以我们将这些信息传递给方法。

char

我们可以通过

从一组字符创建一个新字符串
myArrayList.ToArray(typeof(char));

目前,我们从string newString = new string(arrayOfChars); 方法获得了Array,但此处的ToArray构造函数需要一个字符数组(string),因此我们投了{{1}我们必须使用char[]这就是为什么我们有

Array

所以我们现在从原始的ArrayList中得到一个char[],并且可以将它传递给(char[])myArrayList.ToArray(typeof(char)); 构造函数。

char[]

你仍然没有说明你为什么使用string的原因,但是你必须处理潜在的性能问题并抛出异常,因为你可能会意外地将一个对象放入ArrayList中转换为new string((char[])myArrayList.ToArray(typeof(char))); (这就是为什么我们有ArrayList块)。

答案 2 :(得分:2)

如何尝试

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

答案 3 :(得分:1)

其他答案应该适用于您的特定问题,但是,如果您想在该文本框中写入 li 的内容,则应该以这种方式执行此操作。

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

这样,每次将数组写入文本框时都会清除文本框。

更好的是,特别是在处理大型数组时,使用StringBuilder提高性能(可以通过在文件顶部添加“using System.Text;”来获得性能。

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

答案 4 :(得分:0)

您需要附加 + =

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

答案 5 :(得分:0)

您可以使用String.Join方法连接数组中的所有元素。

它有两个参数,第一个是:“与什么连接?”,你可以加入元素并用逗号分隔它们。第二个参数是您的IEnumerable<T>,您可以加入List<T>的元素以及来自IEnumerable<T>的任何内容。

所以你可以做到

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

这将返回字符串sahi4,因为我们使用空字符串连接数组。

或者您可以使用keyboardP已经提及的String.Concat

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";