programing

Linkq 스타일 "각각"

javamemo 2023. 5. 25. 21:21
반응형

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

반응형