... | ... | @@ -276,10 +276,6 @@ class ExtensionMethod |
|
|
|
|
|
## 람다 식
|
|
|
c# 의 경우 람다 식은 다음과 같이 구별돼 사용된다.
|
|
|
1. 코드로서의 람다 식
|
|
|
익명 메서드의 간편 표기 용도로 사용된다.
|
|
|
2. 데이터로서의 람다 식
|
|
|
람다 식 자체가 데이터가 되어 구문 분석의 대상이 된다. 이 람다 식은 별도로 컴파일할 수 있으며, 그렇게 되면 메서드로도 실행할 수 있다.
|
|
|
|
|
|
### 코드로서의 람다 식
|
|
|
익명 메서드를 이용하면 델리게이트에 전달되는 메서드가 일회성으로 사용될 때 간편하게 나타낼 수 있다.
|
... | ... | @@ -352,7 +348,44 @@ class ActionFunc |
|
|
}
|
|
|
}
|
|
|
```
|
|
|
인자를 16개까지 받을 수 있는 Action과 Func가 미리 정의되어 있다.
|
|
|
인자를 16개까지 받을 수 있는 Action과 Func가 미리 정의되어 있다.
|
|
|
|
|
|
### 컬렉션과 람다 식
|
|
|
|
|
|
```c#
|
|
|
class CollectionLambda
|
|
|
{
|
|
|
public static void Main()
|
|
|
{
|
|
|
List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
|
|
|
|
|
|
//ForEach 메서드를 이용해 간단하게 컬렉션에서의 연산 가능.
|
|
|
//컬렉션에서 요소를 하나씩 꺼내서 element로 전달. Action<T> 연산 수행.
|
|
|
list.ForEach((element) => { Console.WriteLine(element + " * 2 == " + (element * 2)); });
|
|
|
|
|
|
Array.ForEach(list.ToArray(), (element) => { Console.WriteLine(element + " * 2 == " + (element * 2)); });
|
|
|
|
|
|
//FindAll 메서드를 이용하면 특정 조건에 맞는 요소만 고를 수 있다.
|
|
|
List<int> evenList = list.FindAll((element) => element % 2 == 0);
|
|
|
evenList.ForEach(Console.WriteLine);
|
|
|
|
|
|
//Count 메서드를 이용해서 특정 조건을 만족하는 요소들의 개수를 셀 수 있다.
|
|
|
int count = list.Count((element) => element > 3);
|
|
|
Console.WriteLine("3보다 큰 요소의 개수 : " + count);
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### LINQ 메서드식 표현
|
|
|
LINQ 쿼리는 컴파일 될 때 LINQ 확장 메서드로 자동 변경되서 호출된다. 다음의 세 가지 코드는 완전히 동일한 역할을 한다.
|
|
|
|
|
|
|표현|코드|
|
|
|
|-----|-----|
|
|
|
|LINQ 표현|from person in people <br> select person;|
|
|
|
|확장 메서드 표현|people.Select( (elem) => elem );|
|
|
|
|일반 메서드 표현|IEnumerable<Person> SelectFunc(List<Person> people)<br>{<br> foreach (var item in people)<br> {<br> yield return item;<br> }<br>}<br>|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
... | ... | |