2009-12-22 4 views
8

문자열 목록이 있습니다. 모든 문자열에는 밑줄로 변환해야하는 공백이 있습니다. 이렇게하려면 for 또는 foreach 루프를 완전히 사용할 수 있습니다. 나는 아직도 C#에 대해 비교적 익숙하지 않으며 더 익숙해지기를 원합니다. 그 말로, 내 질문은 :C# List <T> .NET 2.0에서 .ConvertAll

어떻게 .NET 2.0에서 작동하도록 다음 코드를 얻을 수 있습니까? ConvertAll 작업이 끝날 때 fieldList을 확인하면 아무 것도 변경되지 않았습니다. 참조 대신 값으로 문자열을 전달하는 데 문제가 있습니까? 내가 .NET 2.0을 사용하고 현재 전환 할 수

string fields = 
    "First Name,Middle Name,Last Name,Birth Date,Gender,Address,City,State,Zip,Email"; 
List<string> fieldList = new List<string>(fields.Split(',')); 
fieldList.ConvertAll<string>(new Converter<string, string>(
    delegate(string str) 
    { 
     str = str.Trim(); 
     str = str.Replace(' ', '_'); 
     return str; 
    } 
)); 

은 명심하십시오, 그래서 LINQ 또는 람다를 사용하여 고급 스러움이 없습니다.

답변

13

는이 같은 변수에 ConvertAll 방법의 결과를 할당해야합니다 :

fieldList = fieldList.ConvertAll<string>(new Converter<string, string>(
    delegate(string str) 
    { 
     str = str.Trim(); 
     str = str.Replace(' ', '_'); 
     return str; 
    } 
)); 

ConvertAll 방법은 새로운 List<T> 그래서 당신이 방법의 결과를 할당해야합니다 반환합니다. 당신이 원하는 경우에 당신이 할 수 fieldList 변수를 다시 사용하지만 코드의 명확성을 개선하기 위해 새로운 변수를 생성하는 것이 더있을 수 있습니다 :

마크 Gravell 아래 댓글에서 지적 하듯이
List<String> convertedFieldList 
    = fieldList.ConvertAll<string>(new Converter<string, string>(
     delegate(string str) 
     { 
      str = str.Trim(); 
      str = str.Replace(' ', '_'); 
      return str; 
     } 
)); 

, 당신은 간단하게 할 수 이 표현식의 구문은 다음과 같습니다.

List<String> convertedFieldList 
    = fieldList.ConvertAll<String>(delegate(String str) { 
      return str.Trim().Replace(' ', '_'); 
     }); 
+7

그냥 완성도, 당신은 ... ConvertAll (대표 (문자열 STR) {...})'로 단순화 할 수 있습니다;' –

+0

@Marc - 좋음 : –

+0

을 지적하는이 오류를 가지고 : 유형 메서드 'System.Collections.Generic.List.ConvertAll (System.Converter)'에 대한 인수를 사용에서 유추 할 수 없습니다. 형식 인수를 명시 적으로 지정하십시오. – kzh

3

ConvertAll 입력 목록이 변경되지 않습니다. 변환 된 내용이 들어있는 새 목록을 반환합니다. 그건 그렇고, 당신은 C#을 2.0 이상으로 new Converter<string,string>을 제거 할 수 있습니다

List<string> converted = fieldList.ConvertAll<string> 
    (delegate(string s) { return s.Trim().Replace(' ', '_'); }); 

이 외에도, 아무것도는 C# 3.0 컴파일러를 사용하고 LINQBridge 및 .NET 2.0을 대상으로하지 못하도록하지

.

+0

어떤 이유로 C# 2.0에서는 새 변환기 선언이없는 형식을 유추 할 수 없습니다. – kzh

관련 문제