Linkq 스타일 "각각"
"각자를 위한" 작업에 대한 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
그러나 값을 딜러에게 직접 스트리밍하기 때문에 (이론적으로) 더 효율적입니다.
및 클래스가 이미 있습니다.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 ) );
각 확장명에 대한 Linkq가 없습니다.하지만, 그List
클래스에는 각 메서드가 있습니다. 사용할 의사가 있는 경우List
직접적으로.
가치가 있는 한, 기준은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' 카테고리의 다른 글
Postgresql: 조건부 고유 제약 조건 (0) | 2023.05.25 |
---|---|
angular-cli server - 기본 포트를 지정하는 방법 (0) | 2023.05.25 |
Python3에서 printf처럼 인쇄하는 방법은? (0) | 2023.05.25 |
셀의 배경색을 셀 내 데이터의 RGB 값으로 설정 (0) | 2023.05.20 |
셸 스크립트에서 웹 브라우저를 시작하는 깨끗한 방법? (0) | 2023.05.20 |