목록에서 문자열을 다듬 으려는 시도가 작동하지 않는 이유는 무엇입니까?
-
03-07-2019 - |
문제
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();
}