ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 람다식(Lambda Expression)
    C# 예제 공부일기 2020. 7. 22. 20:10

    람다식은 익명 메소드를 간단하게 표현할 수 있는 방법이다. 람다식은 개체로 처리되는 코드 블록(식 또는 문 블록)이며 메소드와 같이 매개변수와 리턴 값을 갖는다. 람다식은 인수를 메소드에 전달할 수 있으며 값을 반환할 수 있다.

     

    람다식은 델리게이트로 표현될 수 있는 코드이다.

    람다식의 델리게이트형은 리턴 값이나 매개변수 개수에 따라 정해진다.

    리턴 값이 없는 람다식은 Action 델리게이트에 해당하고 리턴 값이 있는 람다식은 Func델리게이트에 해당한다.

     

    두개의 파라미터를 갖고 리턴 값이 없는 람다식 Action<T1,T2> 델리게이트

     

    한개의 파라미터를 갖고 리턴 값이 하나인 람다식 Func<T, TResult> 델리게이트

     

    람다식은 연산자  " => "로 표현된다. 

     

    매개변수 => 식, 또는 문장 (리턴 값)

     

    예시)

    x => x * x       : 매개변수 x에 대해 x제곱을 리턴하는 람다식.

     

    익명 메소드는 delegate로 만들고 메소드 이름이 없이 사용된다. C#3.0 부터는 람다식이 도입되면서 익명 메소드를 쓸일이 없어졌다. 람다식이 훨씬 간단하기 때문이다.

     

    int n = Count(arr, delegate (int x) {return x % 2==0; });

    람다식으로 표현하면

    int n = COunt(arr, x => x%2==0 );

    class Program
        {
            //delegate bool MemberTest(int a); 요거 없어도 된다. Func쓸거니까
            static void Main(string[] args)
            {
                int[] arr = new int[] { 3, 5, 4, 2, 6, 4, 6, 8, 54, 23, 4, 6, 4 };
                Console.WriteLine("짝수의 개수 : " + Count(arr, x => x % 2 == 0));
                                                             //람다식으로 바로 정의
                Console.WriteLine("홀수의 개수 : " + Count(arr, x => x % 2 ==1));
            }
            static int Count(int[] a, Func<int,bool> testMethod)
            {                                  //리턴 값이 있으니 Func 리턴이 없을 경우엔 Action             
                                                           
                int cnt = 0;
                foreach (var n in a)
                {
                    if (testMethod(n)) //밑의 Is메소드에서는 반환이 bool이다.
                        cnt++;
                }
                return cnt;
            }
        }

    편리하긴 편리한데 아직 Sort 메소드에서 IComparer 인터페이스를 재정의 할때 빼곤 사용해본 적이 없다.

Designed by Tistory.