C# =>Lambda Expression
C# 3.0 부터 지원하는 => 연산자는 C#에서 람다식을 표현할 때 사용한다. 람다식은 무명 메서드와 비슷하게 무명 함수를 표현하는데 사용된다. 람다식은 아래와 같이 입력파라미터(0개~n개)를 => 연산자 왼쪽에, 실행 문장들을 오른쪽에 둔다.
람다 Syntax : ( 입력파라미터) => {문장 블럭};
예를 들어 하나의 문자열을 받아 들여 메시지 박스를 띄운다면 다음과 같이 간단히 쓸 수 있다.
1 | str => { MessageBox.Show(str); } | cs |
입력 파라미터는 하나도 없는 경우부터 여러 개 있는 경우가 있다. 다음 예는 파라미터가 없는 케이스 부터 두개 있는 케이스 까지 보여준다. 마지막 예는 입력 파라미터의 타입이 애매한 경우 이를 써줄 수 있음을 보여준다. 일반적으로 입력타입은 컴파일러가 알아서 찾아낸다.
1 2 3 4 | () => Write("No"); () => Write(p); (s, e) => Write(e); (string s, int i ) => Write(s,i); | cs |
Lambda Expression을 이용하면 이전 페이지에 소개한 delegate와 무명메서드를 더 간략히 표현할 수 있다. 예를 들어 다음과 같은 Click 이벤트는 이벤트 해늘러 메서드인 button1_click을 가리키고 있다. 그래서 메서드 button_click은 해당 클래스내 어딘가에 정의되어 있어야 한다.
1 2 3 4 5 6 | this.button1.Click += new System.EventHandler(button1_Click); private void button1_click(object sender, EventArgs e) { (button)sender).BackColor = Color.Red; } | cs |
위의 new System.EventHandler(button1_Click)은 간단히 button1_Click 메서드명만 사용하여 아래와 같이 줄일 수 있다.
1 | this.button1.Click += button1_Click; | cs |
이를 좀 더 간단하려면 아래와 같이 무명 메서드(Anonymous Method)를 써서 표현할 수 있다.
1 2 3 4 | this.button1.Click += delegate(object sender,Eventargs e) { (Button)sender).BackColor = Color.Red; } | cs |
그리고 람다식을 사용하면 이를 더 간단히 다음과 같이 바꿀 수 있다. 람다식의 오른쪽 실행 블럭이 한 문장일때는 { } 괄호를 생략할 수 있다. 아래 식은 무명 메서드를 쉽게 람다 식으로 변경한 간단한 예이다.
1 2 | this.button1.Click += (sender,e) => ((Button)sender).BackColor = Color.Red; | cs |
람다식은 .NET 여러곳에서 사용되지만 특히 LINQ(Languqge Integrated Query)에서 많이 사용된다.
1 2 | this.button1.Click += (sender,e) => ((Button)sender).BackColor = Color.Red; | cs |
'프로그래밍 > C#' 카테고리의 다른 글
C# Thread 클래스 (0) | 2017.06.20 |
---|---|
C# 익명타입 : 클래스를 미리 정의하지 않고 사용하는 것. (0) | 2017.06.16 |
C# Anonymous Method : 무명메서드, 일회용으로 메서드를 사용 할 때 (0) | 2017.06.15 |
C# Delegate (0) | 2017.06.14 |
C# 이벤트 (0) | 2017.06.14 |
댓글