146

この行を分割したい:

string line = "First Name ; string ; firstName";

トリミングされたバージョンの配列に:

"First Name"
"string"
"firstName"

これをすべて1行で行うにはどうすればよいですか? 以下は、「型 void を変換できません」というエラーを表示します。

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim()); 
4

9 に答える 9

347

試す

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

参考までに、Foreach メソッドはパラメーターにアクション (T を受け取り、void を返す) を受け取り、ラムダは文字列を文字列として返します。Trim は文字列を返します

Foreach 拡張メソッドは、コレクション内のオブジェクトの状態を変更するためのものです。文字列は不変であるため、これは効果がありません

それが役立つことを願っています; o)

セドリック

于 2009-11-13T10:10:14.270 に答える
26

メソッドはForEach何も返さないため、それを変数に割り当てることはできません。

Select代わりに拡張メソッドを使用します。

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
于 2009-11-13T10:11:12.067 に答える
5

p.Trim() は新しい文字列を返すためです。

以下を使用する必要があります。

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
于 2009-11-13T10:11:39.150 に答える
2

正規表現を使用してみてください:

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
于 2015-07-07T10:58:20.850 に答える
2

または、これを試してください:

string[] parts = Regex.Split(line, "\\s*;\\s*");
于 2013-07-24T09:08:16.343 に答える