C#でリストを文字列に変換する


184

C#でリストを文字列に変換するにはどうすればよいですか?

toStringListオブジェクトで実行すると、次のようになります。

System.Collections.Generic.List`1 [System.String]


1
リストはコレクションですが、この文字列はどのように見えるはずですか?
マルコ

ここで説明した3つの方法のいずれかを試すことができます
RBT 2017

回答:


365

多分あなたはしようとしている

string combindedString = string.Join( ",", myList.ToArray() );

"、"は、リストの要素を分割したいものに置き換えることができます。

編集:コメントで言及されているように、あなたも行うことができます

string combindedString = string.Join( ",", myList);

参照:

Join<T>(String, IEnumerable<T>) 
Concatenates the members of a collection, using the specified separator between each member.

4
文字列combinedString = string.Join( "、"、myList.ToArray());
14

2
引数 '2': 'System.Collections.Generic.List <string>'から 'string []'に変換できません
Ash

9
私は最近これを使用しました、それは動作します-.ToArray()を省略します
Adrian K

3
.Net 4.0は任意のIEnumerable <string>を渡す機能を追加したため、@ AdrianKは正しいです。しかし、4.0はこの質問と回答が投稿される前の2010年4月にリリースされたため、おそらくここの人々はまだそれを認識していませんでした(以下の数人を除いて)
Andrew Steitz

vb.netの場合、Dim CombindedString As String = String.Join( "、"、myList.ToArray())
PartTimeNerd

55

私は私の直感にToString基づいて、リストの各要素を呼び出した結果を連結したいとします。

var result = string.Join(",", list.ToArray());

16

あなたは使うことができますstring.Join

List<string> list = new List<string>()
{
    "Red",
    "Blue",
    "Green"
};

string output = string.Join(Environment.NewLine, list.ToArray());    
Console.Write(output);

結果は次のようになります。

Red    
Blue    
Green

の代わりにEnvironment.NewLine、選択した文字列ベースの行区切り文字で置き換えることができます。


14

単純な結合よりも少し複雑なものが必要な場合は、LINQを使用できます。

var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");

["A"、 "B"、 "C"]を取り、 "(a)(b)(c)"を生成します


1
空のコレクションに対してInvalidOperationExceptionがスローされないようにするには、最初のパラメーターとしてシードを指定してAggregateを使用します。
Huacanacha 2015年

13

String.Join(" ", myList)またはString.Join(" ", myList.ToArray())。最初の引数は、サブストリング間のセパレーターです。

var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"

.NETのバージョンによっては、最初にリストでToArray()を使用する必要がある場合があります。


9

あなたはList<string>- 持っているので、それらを連結したい場合は、

string s = string.Join("", list);

動作します(少なくとも.NET 4.0では)。最初のパラメーターは区切り文字です。したがって、カンマ区切りなどもできます。

また、リストを作成するのではなく、StringBuilderを使用して連結を実行する方法を確認することもできます。


8

.ToString()参照型のメソッドSystem.Object.ToString()は、派生型でオーバーライドしない限り(通常、組み込み型の拡張メソッドを使用して)解決されます。このメソッドのデフォルトの動作は、呼び出された型の名前を出力することです。したがって、表示されているのは予想される動作です。

あなたはstring.Join(", ", myList.ToArray());これを達成するようなものを試すことができます。これは追加の手順ですがSystem.Collections.Generic.List<T>、少し簡単にするために拡張メソッドに追加できます。このようなもの:

public static class GenericListExtensions
{
    public static string ToString<T>(this IList<T> list)
    {
        return string.Join(", ", list);
    }
}

(これはフリーハンドでテストされていないコードであることに注意してください。現時点では便利なコンパイラはありません。そのため、少し実験してみてください。)


ToStringではなく呼び出すか、ジェネリックパラメーターで実行しても機能します。しかし、私は拡張メソッドを使用するというあなたのアイデアが好きです:)
IAdapter '13


2

リスト内のアイテムを大きな長い文字列に変換する場合は、次のようにし String.Join("", myList)ます。フレームワークの一部の古いバージョンでは、IEnumerableを2番目のパラメーターとして渡すことができないため、.ToArray()を呼び出してリストを配列に変換する必要がある場合があります。


2

あなたの質問に対する直接の答えはString.Join、他の人が述べたとおりです。

ただし、いくつかの操作が必要な場合は、以下を使用できますAggregate

List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");

string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();

1
本番コードでは、リストに要素があることを確認してください。そうでない場合は例外がスローされます。
AZ_

1

この方法は、テキストファイルからデータを取得して配列に格納し、それを文字列変数に割り当てるときに役立ちました。

string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");  
string marRes = string.Join(Environment.NewLine, lines.ToArray());

うまくいけば誰かを助けるかもしれません!!!!


0

これは私にはうまくいくようです。

var combindedString = new string(list.ToArray());

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.