この行を分割したい:
string line = "First Name ; string ; firstName";
トリミングされたバージョンの配列に:
"First Name"
"string"
"firstName"
これをすべて1行で行うにはどうすればよいですか?次の例では、「型voidを変換できません」というエラーが表示されます。
List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim());
試して
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
参考までに、Foreachメソッドはパラメーターのアクションを取り(Tを取り、voidを返します)、ラムダはストリングとしてストリングを返します。
Foreach拡張メソッドは、コレクション内のオブジェクトの状態を変更するためのものです。文字列は不変なので、これは効果がありません
それがお役に立てば幸いです; o)
セドリック
ForEach
メソッドは何も返さないため、変数に割り当てることはできません。
代わりにSelect
拡張メソッドを使用します。
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
P.Trim()は新しい文字列を返すためです。
以下を使用する必要があります。
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
または、これを試してください:
string[] parts = Regex.Split(line, "\\s*;\\s*");
正規表現を使用してみてください:
List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
ここに拡張メソッドがあります...
public static string[] SplitAndTrim(this string text, char separator)
{
if (string.IsNullOrWhiteSpace(text))
{
return null;
}
return text.Split(separator).Select(t => t.Trim()).ToArray();
}
Splitはstring []タイプを返します。拡張メソッドを書く:
public static string[] SplitTrim(this string data, char arg)
{
string[] ar = data.Split(arg);
for (int i = 0; i < ar.Length; i++)
{
ar[i] = ar[i].Trim();
}
return ar;
}