목록에서 문자열을 다듬 으려는 시도가 작동하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/205299

문제

LINQPAD에서 다음 코드를 시도하고 아래에 다음과 같은 결과를 얻었습니다.

List<string> listFromSplit = new List<string>("a, b".Split(",".ToCharArray())).Dump();
listFromSplit.ForEach(delegate(string s) 
{ 
  s.Trim(); 
});
listFromSplit.Dump();

"A"와 "B"

그래서 문자 B는 내가 기대했던대로 흰색 공간을 제거하지 못했습니다 ...?

누구나 아이디어가 있습니다

참고 : .dump () 메소드는 LinqPad의 확장자 Menthod입니다.

도움이 되었습니까?

해결책

string.trim () 메소드는 업데이트 된 문자열을 나타내는 문자열을 반환합니다. 문자열 객체 자체를 업데이트하지 않고 새 객체를 만듭니다.

당신은 이것을 할 수 있습니다 :

s = s.Trim();

그러나 컬렉션을 열거하는 동안 컬렉션을 업데이트 할 수 없으므로 기존 목록을 열거하는 동안 새 목록을 채우거나 string.split에 의해 리턴 된 문자열 배열을 사용하여 수동으로 목록을 채우십시오.

새 목록 작성 :

List<string> temp = new List<string>("a, b".Split(",".ToCharArray()));
List<string> listFromSplit = new List<string>();

temp.ForEach(delegate(string s) 
{ 
    listFromSplit.Add(s.Trim()); 
});

listFromSplit.Dump();

수동으로 채우기 :

string[] temp = "a, b".Split(",".ToCharArray());
List<string> listFromSplit = new List<string>();

foreach (string s in temp)
{
    listFromSplit.Add(s.Trim()); 
};

listFromSplit.Dump();

다른 팁

당신은 단지 아무것도 할당하지 않고 트림 된 문자열을 만들고 있습니다.

var s = "  asd   ";
s.Trim();

S를 업데이트하지 않을 것입니다 ..

var s = "   asd   ";
s = s.Trim();

할 것이다..

var listFromSplit = "a, b".Split(',').Select(s=>s.Trim());

나는 내가 어떻게 그것에 대해 갈 것인지 생각한다.

게시 된 답변에 추가 Adrian Kuhn 다음을 수행 할 수 있습니다.

var result = listFromSplit.Select(s => s.Trim());

문자열 인스턴스는 불변입니다. 하나를 수정하는 것처럼 보이는 것은 대신 새 인스턴스를 만듭니다.

트림 된 결과를 아무것도 할당하지 않습니다. 이것은 고전적인 오류입니다. 나는 단지 String.replace 로이 실수를하는 습관에서 벗어났습니다. :)

나는 UP와 달리기가 없지만, 이것은 내가 틀리지 않는 한 일을 끝내야합니다.

var result = from each in listFromSplit select each.Trim();

공간과 쉼표 모두에서 나누고 빈 항목을 제거하십시오. 모두 멋지고 손질되었습니다. 그래도 문자열에는 공간이 포함되어 있지 않다고 가정합니다.

List<string> listFromSplit =
     new List<string>( "a , b ".Split( new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries ));

다른 사람들이 제공 한 LINQ 옵션은 잘 작동해야합니다. 다른 옵션으로, 여기에 for 루프를 사용하는 확장 방법이 있습니다.

    public static void TrimCollection(this IList<string> stringCollection) {

        for (int i = 0; i <= stringCollection.Count() - 1; i++)
            stringCollection[i] = stringCollection[i].Trim();

    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top