줄을 한 줄에 모두 분할하고 자르려면 어떻게해야합니까? 것을 한

이 줄을 나누고 싶습니다.

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;
}