Linq 스타일“각각”
가능한 중복 :
IEnumerable에 대해 foreach와 Linq 상당
"각"작업에 대한 Linq 스타일 구문이 있습니까?
예를 들어, 하나의 컬렉션을 기반으로 이미 존재하는 다른 컬렉션에 값을 추가하십시오.
IEnumerable<int> someValues = new List<int>() { 1, 2, 3 };
IList<int> list = new List<int>();
someValues.ForEach(x => list.Add(x + 1));
대신에
foreach(int value in someValues)
{
list.Add(value + 1);
}
ToList () 확장 메서드를 사용하는 것이 가장 좋습니다.
someValues.ToList().ForEach(x => list.Add(x + 1));
BCL에는 ForEach를 직접 구현하는 확장 방법이 없습니다.
BCL 에는이를 수행 하는 확장 방법 이 없지만 System
네임 스페이스 에는 옵션 이 있습니다. 프로젝트에 반응성 확장 을 추가하는 경우 :
using System.Reactive.Linq;
someValues.ToObservable().Subscribe(x => list.Add(x + 1));
이것은 위의 사용과 같은 최종 결과를 ToList
갖지만 이론적으로는 값을 대리자에게 직접 스트리밍하기 때문에 더 효율적입니다.
Array
및 List<T>
클래스는 이미 ForEach
이 특정한 구현하지만, 방법. (그렇지만 전자는입니다 static
).
실제로 foreach
명령문 보다 큰 이점을 제공하는지는 확실하지 않지만 모든 IEnumerable<T>
오브젝트에 대해 작업을 수행하는 확장 메소드를 작성할 수 있습니다.
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
action(item);
}
이렇게하면 질문에 게시 한 정확한 코드가 원하는대로 작동 할 수 있습니다.
내장 된 것은 없지만 자신 만의 확장 방법을 쉽게 만들 수 있습니다.
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
foreach (T item in source)
{
action(item);
}
}
공식적인 MS 계열은 "기능적 운영이 아니기 때문에"(즉, 상태 저장 운영)입니다.
다음과 같은 작업을 수행 할 수 없습니다 :
list.Select( x => x+1 )
또는 실제로 목록에 필요한 경우 :
var someValues = new List<int>( list.Select( x => x+1 ) );
Linq ForEach 확장이 없습니다. 그러나 List
클래스를 List
직접 사용하려는 경우 클래스에 ForEach 메소드가 있습니다.
가치있는 것에 대해 표준 foreach
구문은 원하는 결과를 제공하며 읽기가 더 쉽습니다.
foreach (var x in someValues)
{
list.Add(x + 1);
}
당신이 단호하다면 Linq 스타일 확장을 원합니다. 직접 구현하는 것은 쉽지 않습니다.
public static void ForEach<T>(this IEnumerable<T> @this, Action<T> action)
{
foreach (var x in @this)
action(x);
}
표준 Linq에는 그런 것이 없지만 MoreLinq 에는 ForEach 연산자가 있습니다 .
참고 URL : https://stackoverflow.com/questions/1509442/linq-style-for-each
'Programing' 카테고리의 다른 글
내 .exe의 경로 가져 오기 (0) | 2020.05.20 |
---|---|
VIM-같은 줄에 여러 명령 (0) | 2020.05.20 |
Ajax 성공 이벤트가 작동하지 않습니다 (0) | 2020.05.20 |
트위터 부트 스트랩 버튼 텍스트 워드 랩 (0) | 2020.05.20 |
jquery 입력 필드를 비우는 방법 (0) | 2020.05.20 |