2011-04-08 5 views
1

다른 형식이 해당 생성자에서 이전 형식을 받아 들일 때 IEnumerable 목록 (예 : 문자열)을 다른 형식의 IEnumerable 목록으로 "변환"(반환) 할 수 있습니까?IEnumerable 목록과 함께 사용할 집계 메서드

예를 들어, DataTable.Columns.AddRange() 메서드는 열 목록 만 받아들입니다. LINQ 또는 일종의 집계 함수를 사용하여 string 목록을 제공하여 DataColumn 목록을 반환 할 수 있습니까? 나는 코드는 대략 다음을 할 것이라고 상상하지만, 한 줄에 : 마찬가지로

var columnList = new List<DataColumn>(); 
foreach (var item in myStringList) 
{ 
    columnList.Add(item); 
} 
return columnList; 

, 목록을 특정 방법에 대해 회원들의 각각을 실행 집계 방법이있다? 예를 들어, 나는 다음과 같은 유사한 foreach 루프를 수행하는 한 줄 방법을 찾고 있어요 :

foreach (var item in myStringList) 
{ 
    myDataTable.Columns.Add(item); 
} 

을 분명히, 나는 데이터 열이나 문자열에 실제로 의존하지 않는 일반적인 답을 찾고 있어요.

답변

3

당신은이 방법이 일 개 List<T> 클래스에 의해 정의된다

var newList = list.ConvertAll(x => new Something(x)); 
list.ForEach(x => DoSomething(x)); 

를 작성할 수 있습니다. 당신이 임의의 IEnumerable<T>이있는 경우

, 당신은 LINQ 사용할 수 있습니다

var newEnumerable = enumerable.Select(x => new Something(x)); 
+0

주목할 점 ForEach는 목록 에서만 사용할 수 있으며 Linq는 IEnumerable ForEach를 직접 구현하지 않지만 쉽게 추가 할 수 있습니다. –

0

myStringList.ForEach (항목 => myDataTable.Columns.Add (항목));

EDIT : 그건 Linq가 아닙니다. 미안하지만, 내 실수 야.

+1

그건 LINQ가 아닙니다. – SLaks

+0

당신 말이 맞아요. 죄송합니다. 새로운 것을 배웠습니다! – Alessandro

1

예, 사실 모든 LINQ 관련 것은 아니지만 그렇습니다. ForEach는 단지 List 메서드입니다. 귀하의 두 가지 예 :

myStringList.ForEach(x => columnList.Add(x)); 
// assumes myStringList is a List<T>... otherwise convert your enumerable using ToList() 

ForEach 메서드는 동작을 취하여 각 항목에 대해 일부 논리를 수행 할 수 있습니다. 당신이 변환을 수행하려는 경우, 쉽게, 그래서 충분한 선택과 결합 :

myStringList.Select(x => new DataColumn(x)) 
     .ToList() 
     .ForEach(x => columnList.Add(x)); 
// transforms each element of the string by adding some text, then calling foreach 
// on the items 
2

전화 말했다 Enumerable.Aggregate

List<DataColumn> result = myStringList.Aggregate(
    new List<DataColumn>(), 
    (list, item) => { list.Add(item); return list; } 
); 

return result; 

, foreach 문이 더 좋다.

관련 문제