文字列を1行でList <string>に変換しますか?


100

文字列があります:

var names = "Brian,Joe,Chris";

これをList<string>区切り文字,で1行に変換する方法はありますか?


15
「1行で」という要件が理解できません。操作をできるだけ小さなスペースに収める方法ではなく、明確で理解しやすいコードを書くために撮影します。
エドS.

6
LINQの登場により、読み取り可能でクリーンな「ワンライナー」がC#IMOではるかに一般的になりました。
Matt Greer、

5
@ Ed S.-「1行で」というのは最善の方法ではないかもしれないと私は同意しますが、Matt Greerが提供するような1行のステートメントは非常に明確で理解しやすい傾向があります。私の推測では、彼はforループの使用を避けたいだけだと思います。
StriplingWarrior、2011

4
ワンライナーは本質的に理解するのが難しいと言うつもりはありません、それは決して必要ではないということです。利用可能な最善の方法を実行してください。それがたまたま1行に収まればすばらしいですが、コードの記述方法を形作るものではありません。
エドS.

回答:


196
List<string> result = names.Split(new char[] { ',' }).ToList();

または、Danの提案によってさらにきれいになります。

List<string> result = names.Split(',').ToList();

11
わざとそこに置いたかもしれませんが、私はいつも全部をnew char[] { }省きます。そうすれば、少なくとも私には読みやすくなります
Dan Tao

4
@ダン:私は同意し、通常、paramsオーバーロードを使用します。しかし、質問への回答については、冗長性の方が良いと感じることがあります。本当に意見の問題です。
Matt Greer、

2
ToList()はもう利用できないようですか?
Gina Marano 2013

10
System.LINQ名前空間を持ち込みましたか?
Matt Greer 2013


3

ソース文字列が空の場合、空のアイテムを含む単一のアイテムリストを防ぐため、これを好みます。

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();


1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

出力:

Welcome

To 

Programming

0

すでにリストがあり、区切り文字列から値を追加したい場合は、AddRangeまたはを使用できますInsertRange。例えば:

existingList.AddRange(names.Split(','));

0

Stringify.Library nugetパッケージを使用する

//Default delimiter is ,
var split = new StringConverter().ConvertTo<List<string>>(names);

//You can also have your custom delimiter for e.g. ;
var split = new StringConverter().ConvertTo<List<string>>(names, new ConverterOptions { Delimiter = ';' });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.