어떻게 든 C#에서 foreach 루프 내에서 문자열 바꾸기를 할 수없는 것 같습니다. C#에서foreach 루프에서 C# string.replace
답변
를 (상단 답 참조)
var replacedNames = names.Select(x => x.Replace("pdf", "txt"));
우리는 names
의 유형을 잘 모르겠지만, 당신은 그것을 다시 지정하려면 당신은 잠재적으로 ToArray
또는 ToList
을 사용할 수
// If names is a List<T>
names = names.Select(x => x.Replace("pdf", "txt")).ToList();
// If names is an array
names = names.Select(x => x.Replace("pdf", "txt")).ToArray();
당신은 알고 있어야합니다 당신이 모든 비록 순간에 LINQ를 사용하지 않는 게시 한 코드 ...
문자열, 그래서 s.Replace
새로운 문자열이 반환됩니다 (변경되지 않음) 불변)이 아마추어 소리 경우 LINQ 아주 새로운 여전히
foreach (string s in names)
{
s.Replace("pdf", "txt");
}
오전 그래서 나를 용서 다음과 같이 내 코드는 . 아쉽게도 이것은 업데이트를 수행 할 때 foreach
을 사용할 수 없음을 의미합니다. 이름은 배열의 경우이 작업을해야합니다 : 그것은 모두 StringBuilder를 사용하는 것이 좋습니다하지만 당신의 부탁 때문에
for(int i = 0; i < names.Length; i++)
{
names[i] = names[i].Replace("pdf", "txt");
}
s.Replace가 함수 인 것은 .. s.Replace() =. 그 쉬운 ... 당신은 당신이 LINQ 솔루션 후 왔다고
왜 StringBuilder를 사용하면 더 좋을까요? * 같은 * 문자열에 대해 여러 번 대체가 수행되는 것과는 다릅니다. –
다른 사람들이 언급했듯이 이것을 수행하려면 for
루프를 사용해야합니다. 그러나 작업을 내부에서 수행 할 필요가없는 경우 (즉, 결과가 다른 콜렉션이 될 수 있음) linq 쿼리로도 처리 할 수 있습니다.
var results = from name in names select name.Replace("pdf", "txt");
일부 파일 이름의 확장자를 변경하려는 것 같습니다. 그게 당신이하려는 경우 그 목적을 위해 특별히 설계된 Path.ChangeExtension
을 권하고 싶습니다.
var results = from name in names select Path.ChangeExtension(name, "txt");
여기에 쿼리 표현식을 사용하면 과도한 것처럼 보입니다. 단일 Select를 수행하는 중이라면 직접 호출하지 않는 이유는 무엇입니까? +1 Path.ChangeExtension. –
@ 존 - 쿼리 표현식이 더 멋지게 보이고 읽기가 더 쉽다고 생각합니다. 그것은 모두 동일한 코드로 컴파일되고, 몇 가지 여분의 문자를 입력해도 실제로 나를 괴롭히지 않습니다. 스킵/테이크 (take)/테이크 (take)를 사용하거나 목록으로 변환하는 것과 같은 쿼리에서 표현할 수없는 작업을하고 있다면 확장 메서드를 직접 사용할 수 있습니다. –
개인적인 취향이라고 생각합니다 ... 좀 더 복잡해지면 쿼리 표현을 좋아하지만, 단일 필터 또는 단일 프로젝션을 수행하는 경우 쿼리 표현이 덜 직접적으로 보입니다. –
바꾸기를 사용하면 응용 프로그램이 느려집니다. 사용 정규식 :
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx
이 사람 테스트에 따르지 않음 : http://blogs.msdn.com/b/debuggingtoolbox/archive/2008/04/02/comparing-regex-replace-string-replace-and-stringbuilder-replace-which-has- 더 나은 performance.aspx – grmbl
- 1. foreach 루프에서 sprintf() 분할
- 2. foreach 루프에서 C#을 인스턴스화 하시겠습니까?
- 3. foreach 루프에서 switch 문을 제거합니다.
- 4. foreach 루프에서 Null 예외 처리
- 5. foreach 루프에서 자동 증가량을 변경하십시오.
- 6. foreach 루프에서 정수를 저장하는 방법
- 7. foreach 루프에서 ORDER BY하는 방법?
- 8. C# forwardonly string.replace
- 9. Powershell은 foreach 루프에서 해시 테이블 값을 업데이트합니까?
- 10. foreach 루프에서 배열을 동일한 루프에서 수정 된 배열로 대체
- 11. foreach 루프에서 배열을 새로 고치는 방법은 무엇입니까?
- 12. C#의 여러 foreach 루프에서 SQLite 삽입을 실행 하시겠습니까?
- 13. C# 완료 후 foreach 루프에서 빠져 나올 수 없습니다.
- 14. fopen을 사용하여 foreach 루프에서 여러 번 fwrite합니다.
- 15. 속성이 ForEach 루프에서 getted 될 때?
- 16. foreach 루프에서 InvalidOperationException을 처리하는 방법 yield return?
- 17. foreach 루프에서 array_push를 사용하는 배열 내삽 방법
- 18. 어떻게 PHP의 foreach 루프에서 세션 이름을 에코합니까?
- 19. foreach 루프에서 작업 시작 마지막 항목의 값
- 20. 이 Perl foreach 루프에서 $ _는 어디에서 왔습니까?
- 21. foreach 루프에서 단계를 뒤로 이동하는 방법은 무엇입니까?
- 22. 펄 + foreach 루프에서 씹는를 사용하는 방법
- 23. foreach 루프의 동작 잡기 C#
- 24. String.replace ("\ c", "")에서 어떤 ASCII 값이 ""입니까?
- 25. string.replace 함수 버그?
- 26. Inverse String.Replace - 빠른 방법?
- 27. OutOfMemoryException string.replace()를 사용하는 중
- 28. Foreach 문제가 C#
- 29. C# Foreach XML 노드
- 30. 내 변수가이 foreach 루프에서 반복되지 않는 이유는 무엇입니까?
IT는'목록'도 작동합니다. _Length_를 _Count_로 대체하십시오. –