2008-10-15 3 views
5

나는 LINQPad에 다음 코드를 시도하고 그 결과는 다음과 같다 가지고 :목록에서 문자열을 자르려고 시도한 이유가 무엇입니까? <string>가 작동하지 않는 이유는 무엇입니까?

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입니다] 당신은 그냥있어

+1

문자열은 변경 불가능합니다. – mmcdole

답변

10

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(); 
+0

또는 foreach 대신 for를 수행하십시오. – nabeelfarid

17

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

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

이 ..

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

이, 내가 생각, 내가 그것에 대해 어떻게 가고 싶어 할 것입니다 반면

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

는의를 업데이트하지 않습니다.

1

트리밍 한 결과는 아무 것도 지정하지 않습니다. 이것은 고전적인 오류입니다, 나는 방금 문자열로이 실수를하는 습관을 벗어났습니다. 대체 :

2

문자열 인스턴스가 변경되지 않습니다. 하나를 수정하는 것으로 보이는 모든 것이 대신 새 인스턴스를 만듭니다.

0

분할 및 빈 항목을 제거

새 목록을 작성합니다. 모두 멋지다. 하지만 문자열에 공백이 들어 있지 않다고 가정합니다.(내가 잘못하지 않는 한)

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

나는 어떤 IDE를 가동이 없다,하지만이 작업이 완수해야 다음 작업을 수행 할 수

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

Adrian Kuhn에 의해 게시 대답에 :

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

다른 사람이 제공 한 linq 옵션은 잘 작동합니다. 또 다른 옵션으로 for 루프를 사용하는 확장 메소드가 있습니다 :

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

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

    }