Noobの質問...リストをテキストボックスに表示しようとしています...残念ながら、私のコードはリストの最初の要素のみを表示します...
private void Form1_Load(object sender, EventArgs e)
{
List<String> vegetables = new List<String>();
vegetables.Add("tomato");
vegetables.Add("carrot");
vegetables.Add("celery");
vegetables.Add("potato");
textBox1.Text = displayMembers(vegetables);
}
public string displayMembers(List<String> vegetables)
{
foreach (String s in vegetables)
{
return s.ToString();
}
return null;
}
すべてのメンバーを表示するtextBoxを取得するにはどうすればよいですか?私の間違いはどこですか?
return s.ToString()
を実行すると、そのメソッドの残りは実行を停止します。
メソッドは複数のものを返すことはできません。
おそらく書きたい
someTextBox.Text = String.Join(Environment.NewLine, vegetables);
string.Join() を使用します。
textbox1.Text = string.Join(" ", vegetables);
答えはあなたが思ったよりも近くて簡単でした:)
注:コメントで述べたように、この特定の関数には、.Netフレームワークのv4.0で追加されたいくつかのオーバーロードがあります。以前のバージョンで使用可能なものを確認するには、Other Versions
MSDN docoページのタイトルのすぐ下のドロップダウン。
何らかの方法で文字列を連結する必要があります
public string displayMembers(List<String> vegetables)
{
return string.Join(", ", vegetables.ToArray());
}
または
public string displayMembers(List<String> vegetables)
{
return string.Join(Environment.NewLine, vegetables.ToArray());
}
Foreachを実行していますが、最初の要素に戻ります。これにより、最初の要素のみが表示されます。
代わりに、おそらく次のようなことをしたいでしょう:
public string DisplayMembers(IEnumerable<String> vegetables)
{
return String.Join(", ", vegetables);
}
これは String.Join を使用して、野菜を「つなぎ合わせて」単一の文字列にし、TextBoxに表示できます。
これを試して:
public string displayMembers(List<String> vegetables)
{
var text = string.Empty;
foreach (String s in vegetables)
{
text += s.ToString() + "\r\n";
}
return text;
}