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”。

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

4

6 回答 6

8

如果li是一个char[],使用tb_output.Text = new String(li)

如果li是一个List<char>,使用tb_output.Text = new String(li.ToArray())

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

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

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

于 2013-06-12T21:04:05.903 回答
3

您应该尽可能避免使用 ArrayLists。使用List<char>char[]数组。我使用过char是因为您只是持有chars,但string如果您要使用多个角色,您可以将其更改为。

使用 char 数组,您可以简单地执行此操作

string myString  = new string(li);

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

tb_output.Text = String.Concat(myArrayOrList);

更新以澄清评论

如果你想使用 a 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为 ArrayList 添加了一个块,因为如果数组列表中有一个元素无法转换为 a ,则抛出charan 。InvalidCastExceptiona 通常不需要这样做,List<char>因为您知道列表只能包含chars在其中,而 ArrayList 可以具有任何对象类型。

根据评论更新 2

new string((char[])myArrayList.ToArray(typeof(char))可以断线。

首先,我们使用ToArray()方法将 转换ArrayListArray

myArrayList.ToArray();

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

myArrayList.ToArray(typeof(char));

我们可以通过执行从一个字符数组创建一个新字符串

string newString = new string(arrayOfChars);

目前我们有一个ArrayfromToArray方法,但是string这里的构造函数需要一个 chars ( ) 数组,char[]所以我们将Array我们必须的转换为 achar[]这就是为什么我们有

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

所以我们现在有一个char[]来自原始 ArrayList 的,并且可以将它传递给string构造函数。

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

您仍然没有给出使用 an 的原因,ArrayList但是您必须处理潜在的性能问题和强制转换异常,因为您可能会不小心将一个无法转换为 a 的对象放入 ArrayList char(即为什么我们有Try..Catch块)。

于 2013-06-12T21:06:27.707 回答
2

试试怎么样

foreach (string value in li)
{
    tb_output.Text += value;
}
于 2013-06-12T21:04:48.220 回答
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();
于 2013-06-12T21:13:09.947 回答
0

您需要附加+=

foreach (string value in li)
{
   tb_output.Text += li.ToString();
}
于 2013-06-12T21:04:38.207 回答
0

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

它有两个参数,第一个是:“join with what?”,例如可以加入元素并用逗号分隔它们。第二个参数是你的IEnumerable<T>,你可以加入元素aList<T>和任何来自的东西IEnumerable<T>

所以你可以做

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

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

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

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()which 将数组转换为 内部的字符串foreach,不如使用它value来获取每个位置的字符串...

此外,如果您要连接字符串,则应StringBuilder在此类情况下使用,但您也可以使用 operator +

stringA = stringA + "B";  // or
stringA += "B";
于 2013-06-12T21:10:35.210 回答