Programing

Linq 스타일“각각”

lottogame 2020. 5. 20. 07:48
반응형

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갖지만 이론적으로는 값을 대리자에게 직접 스트리밍하기 때문에 더 효율적입니다.


ArrayList<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

반응형