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

の場合lichar[]使用tb_output.Text = new String(li)

の場合liList<char>使用tb_output.Text = new String(li.ToArray())

がまたはの場合liは、string[]List<string>tb_output.Text = String.Concat(li)

それ以外の場合、sliが含まれている場合は、chartb_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);

コメントを明確にするための更新

を使用したい場合はList<T>、これを行うことができます。

List<char> li = new List<char>() { 's', 'a', 'h', 'i', 'l' };
tb_output.Text = String.Concat(li);

本当にArrayListhere を使用する必要がある場合は、単にその 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は、配列リストに a にキャストできない要素がある場合char、anInvalidCastExceptionがスローされるためです。ArrayList は任意のオブジェクト型を持つことができるのに対し、List<char>リストにはそれらしか持てないことがわかっているため、これは一般に a では必要ありません。chars

コメントに基づいて2を更新

new string((char[])myArrayList.ToArray(typeof(char))が切れる可能性があります。

まず、メソッドToArray()ArrayListを使用してを に変換します。Array

myArrayList.ToArray();

ただし、現時点では ArrayList は型ではなく型を保持しToArrayているため、メソッドに ArrayList 内のすべてのオブジェクトを に変換するよう伝えたいと考えています。そのため、その情報をメソッドに渡します。charobjectchar

myArrayList.ToArray(typeof(char));

次のようにして、文字の配列から新しい文字列を作成できます。

string newString = new string(arrayOfChars);

現時点ではメソッドArrayからがありますが、ここのコンストラクターには chars ( ) の配列が必要なので、持っている をにキャストします。ToArraystringchar[]Arraychar[]

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

これでchar[]、元の ArrayList から が取得され、それをstringコンストラクターに渡すことができます。

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

を使用している理由をまだ説明していませんが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

String.Joinメソッドを使用して、配列のすべての要素を結合できます。

2 つのパラメーターが必要です。最初のパラメーターは「何と結合しますか?」です。要素を結合して、たとえばコンマで区切ることができます。2 番目のパラメータは yourです。 IEnumerable<T>a の要素とList<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 は、配列から一度に 1 つの要素を返し、名前を付けてli入れvalueます。li.ToString()配列を 内の文字列に変換する whichを使用しようとする代わりに、各位置で文字列を取得するためにforeach使用する必要がvalueあります...

また、文字列を連結するStringBuilder場合は、このような場合に使用する必要がありますが、 operator を使用することもできます+

stringA = stringA + "B";  // or
stringA += "B";
于 2013-06-12T21:10:35.210 に答える
0

+=を追加する必要があります

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