web-dev-qa-db-ja.com

.Net-リストのすべての項目を出力文字列に結合します

リストから項目を選択してそれらを結合するLinq式(またはその他)を作成するにはどうすればよいですか?

IList<string> data = new List<string>();

data.Add("MyData1");
data.Add("MyData2");

string result = //some linq query... I try data.Select(x => x + ",");

//result = "MyData1, MyData2"
36
Melursus

なぜ( String.Joinメソッド

string joined = String.Join(",", data.ToArray());

しかし、それがLINQでなければならない場合は、

string joinedLinq = data.Aggregate((i, j) => i + "," + j);
76
Adriaan Stander

LINQにこだわっている場合、Aggregate()を使用したくなるかもしれません

IList<int> data = new List<int>();

data.Add(123);
data.Add(456);

var result = data.Select(x => x.ToString()).Aggregate((a,b) => a + "," + b);

私はこれはお勧めしません私が難しい方法を見つけたので、リストにアイテムが含まれていない場合、またはアイテムが1つしかない場合は失敗するためです。私は忘れましたが、すべて同じように失敗します:-)

String.Join(...) is the best way

データタイプが文字列ではない上記の例では、これを行うことができます:

string.Join(",", data.Select(x => x.ToString()).ToArray())
12
Simon_Weaver

Anthony Pegramが書いたように、String.Join<T>(delimiter, IEnumerable<T>)は.NET 4で最高のソリューションです!

3
Silvan Hofer

リストを単一の集約オブジェクトに結合する必要がある場合は、集約を使用できます。

string s = "";
if(data.Count > 0)
  s = data.Aggregate((a, b) => a + ',' + b);
1
Brian R. Bondy