이 줄을 나누고 싶습니다.
string line = "First Name ; string ; firstName";
트림 된 버전의 배열로 :
"First Name"
"string"
"firstName"
이 모든 것을 한 줄로 어떻게 할 수 있습니까? 다음은 “cannot convert type void”오류를 제공합니다.
List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim());
답변
시험
List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
참고로 Foreach 메서드는 매개 변수에 대해 Action (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*");
답변
확장 방법은 다음과 같습니다.
public static string[] SplitAndTrim(this string text, char separator)
{
if (string.IsNullOrWhiteSpace(text))
{
return null;
}
return text.Split(separator).Select(t => t.Trim()).ToArray();
}
답변
Regex를 사용해보십시오.
List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
답변
분할은 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;
}
나는 당신의 솔루션이 마음에 들었 기 때문에 그것에 추가하고 더 유용하게 만들기로 결정했습니다.
public static string[] SplitAndTrim(this string data, char[] arg)
{
return SplitAndTrim(data, arg, StringSplitOptions.None);
}
public static string[] SplitAndTrim(this string data, char[] arg,
StringSplitOptions sso)
{
string[] ar = data.Split(arg, sso);
for (int i = 0; i < ar.Length; i++)
ar[i] = ar[i].Trim();
return ar;
}