에서 상속하는 I List<string>
에서 상속 이. 당신이 그런 IEnumerable<string>
를 지원하는 List<string>
또는 string[]
, 아무것도 같은 문자열의 순서는, filePathCollection
라는 한 가정하면, 당신은 사용할 수 있습니다
var prefixedPaths = filePathCollection.Select(path => baseDirectory + path);
이 헤이 프레스토 - 당신은 지금 baseDirectory
로 시작 경로의 IEnumerable<string>
이 있으므로 당신은 foreach
등을 사용할 수 있습니다. 끝났습니다.
이 답변의 나머지 부분은 다른 경우에 적용 할 수있는 부분을 설명하는 좀 더 일반적인 설명입니다.
Select
은 필수적으로 다음을 의미합니다.이 일련의 항목을 취하여 각 항목과 함께 무언가를 수행하고 모든 결과가 포함 된 새 순서를 되돌려 보냅니다. "무언가"는 이전 시퀀스에 저장된 것과 동일한 유형의 매개 변수 하나를 허용하는 메서드를 제공하여 지정되며 원하는 시퀀스를 반환합니다.이 시퀀스는 새 시퀀스의 항목 유형이됩니다. 이 경우 항목 유형이 변경되지 않습니다.당신이 연주로 path
생각할 수있는 - 그래서 path
가 string
이며,
이
path => baseDirectory + path
컴파일러는 소스 컬렉션의 요소 유형이 string
것으로 파악 : 또한 우리는 람다를 사용하여 "대신에"방법을 정의하고 모든 것을 스스로 작성해야하는 경우 "루프 변수"와 동일한 역할을합니다. 그리고 path
에 연결을 사용하므로 결과는 또 다른 string
이므로 새 시퀀스도 IEnumerable<string>
이어야합니다. 이것은 "형식 유추"이며이 내용이 작성해야하는 코드의 양을 줄이는 데 중요한 부분입니다.
또 다른 중요한 일은 "닫힘"입니다. 이것은 우리의 람다를 "열린"매개 변수 path
뿐만 아니라 "닫힌"매개 변수 baseDirectory
에도 의존하지 않는 기술적 이름입니다. 명시 적으로 매개 변수로 전달됩니다. 람다는 그저 바깥쪽에 도달하여 그 안에 정의 된 메소드의 변수를 볼 수 있습니다. 이것은 특히 baseDirectory
을 매개 변수로 사용하여 _baseDirectory
필드에 저장하는 생성자를 작성해야하는 필요성을 없애기 때문에 나중에 다른 메소드에서 반복적으로 사용할 수 있습니다.
새 시퀀스는 항상 들어오는 시퀀스와 길이가 같습니다. 항목을 필터링하려면 Where
을 사용하십시오. 시퀀스를 더 길게하려면 SelectMany
을 사용하십시오.
이 사용 ... 그것을 일반적인 과부하를하시기 바랍니다주고'Path.Combine (base 디렉토리, 값)'http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx . –