프로그래밍 관련/언어들의 코딩들 C++ JAVA C# 등..

C# 람다식 관련

AlrepondTech 2019. 8. 21. 11:27
반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

출처: https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

 

 

람다 식은 다음 두 형식의 식입니다.A lambda expression is an expression of any of the following two forms:

  • 식이 본문으로 포함된 식 람다:Expression lambda that has an expression as its body:(input-parameters) => expression
  • C# 복사
  • 문 블록이 본문으로 포함된 문 람다:Statement lambda that has a statement block as its body:(input-parameters) => { <sequence-of-statements> }
  • C# 복사

람다 선언 연산자=>를 사용하여 본문에서 람다의 매개 변수 목록을 구분합니다. 람다 식을 만들려면 람다 연산자 왼쪽에 입력 매개 변수를 지정하고(있는 경우) 다른 쪽에 식이나 문 블록을 지정합니다.

 

람다 식은 대리자 형식으로 변환할 수 있습니다. 람다 식을 변환할 수 있는 대리자 형식은 해당 매개 변수 및 반환 값의 형식에 따라 정의됩니다. 람다 식에서 값을 반환하지 않는 경우 Action 대리자 형식 중 하나로 변환할 수 있습니다. 값을 반환하는 경우 Func 대리자 형식으로 변환할 수 있습니다. 예를 들어 매개 변수는 두 개지만 값을 반환하지 않는 람다 식은 Action<T1,T2> 대리자로 변환할 수 있습니다 매개 변수가 하나이고 값을 반환하는 람다 식은 Func<T,TResult> 대리자로 변환할 수 있습니다 다음 예제에서는 x라고 이름이 지정되고 x 제곱 값을 반환하는 매개 변수를 지정하는 람다 식 x => x * x는 대리자 형식의 변수에 할당됩니다.

 

C#
Func<int, int> square = x => x * x;
Console.WriteLine(square(5));
// Output:
// 25


다음 예제에 표시된 대로 식 람다는 식 트리 형식으로도 변환할 수 있습니다.
C#
System.Linq.Expressions.Expression<Func<int, int>> e = x => x * x;
Console.WriteLine(e);
// Output:
// x => (x * x)

 

대리자 형식이나 식 트리의 인스턴스가 필요한 코드에서 람다 식을 백그라운드에서 실행해야 하는 코드를 전달하는 Task.Run(Action) 메서드의 인수 등으로 사용할 수 있습니다.

다음 예제에 표시된 대로 LINQ 쿼리 식을 쓸 때도 람다 식을 사용할 수 있습니다.

 

C#
int[] numbers = { 2, 3, 4, 5 };
var squaredNumbers = numbers.Select(x => x * x);
Console.WriteLine(string.Join(" ", squaredNumbers));
// Output:
// 4 9 16 25

 

예를 들어 LINQ to Objects 및 LINQ to XML에서 메서드 기반 구문을 사용하여 System.Linq.Enumerable 클래스에서 Enumerable.Select 메서드를 호출하는 경우 매개 변수는 대리자 형식 System.Func<T,TResult>입니다.예를 들어 LINQ to SQL에서 System.Linq.Queryable 클래스에서 Queryable.Select 메서드를 호출하는 경우 매개 변수 형식은 식 트리 형식 Expression<Func<TSource,TResult>>입니다 Expression<Func<TSource,TResult>>. 두 경우 모두 동일한 람다 식을 사용하여 매개 변수 값을 지정할 수 있습니다.그러면 두 Select 호출이 비슷하게 보일 수 있지만 실제로 람다 식을 통해 생성되는 개체 형식은 다릅니다.

식 람다Expression lambdas

=> 연산자의 오른쪽에 식이 있는 람다 식을 식 람다라고 합니다. 식 람다는 식 트리를 만드는 데 광범위하게 사용됩니다. 식 람다는 식의 결과를 반환하며 기본 형식은 다음과 같습니다.

 

C#
(input-parameters) => expression

 

입력 매개 변수가 0개이면 다음과 같이 빈 괄호를 지정합니다.
C#
Action line = () => Console.WriteLine();

 

둘 이상의 입력 매개 변수는 다음과 같이 괄호로 묶고 쉼표로 구분해야 합니다.
C#
Func<int, int, bool> testForEquality = (x, y) => x == y;

 

컴파일러에서 입력 형식을 유추할 수 없는 경우도 있습니다. 다음 예제와 같이 형식을 명시적으로 지정할 수 있습니다.
C#
Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

 

입력 매개 변수 형식은 모두 명시적이거나 암시적이어야 합니다. 그렇지 않으면 CS0748 컴파일러 오류가 발생합니다.
식 람다의 본문은 메서드 호출로 구성될 수 있습니다. 하지만 SQL Server와 같은 .NET 공용 언어 런타임의 컨텍스트 외부에서 평가되는 식 트리를 만드는 경우에는 람다 식에 메서드 호출을 사용하지 않아야 합니다. 이러한 메서드는 .NET 공용 언어 런타임의 컨텍스트 안에서만 의미가 있습니다

 

 

 

 

=================================

=================================

=================================

 

 

반응형