只是一个非常小的问题。
我有一个名为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 :(得分:8)
如果li
是char[]
,请使用tb_output.Text = new String(li)
如果li
是List<char>
,请使用tb_output.Text = new String(li.ToArray())
如果li
是string[]
或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
,则抛出InvalidCastException
。 List<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";