Lambda expressions, operator
Peponi │ 11/27/2024 │ 4m
C#
SyntaxOperator=>
Lambda expressions, operator
11/27/2024
4m
Peponi
C#
SyntaxOperator=>
1. Introduction
람다 기호 =>
는 두 가지 기능을 한다.
2. 람다 연산자
다음은 람다 식을 정의하는 방법을 보여준다.
Action foo = () => Console.WriteLine("Hello, World!");
Func<string> bar = () => "Hello, World!";
형식 추론이 가능한 경우, 람다 식의 매개 변수에 대한 형식 선언을 생략할 수 있다.
Func<string, string> foo = message => $"Hello {message}"; // 매개 변수가 하나인 경우 괄호 () 생략 가능
Func<string, string, string> bar = (messageA, messageB) => $"{messageA}{messageB}";
형식 추론이 불가능한 경우 형식을 지정할 수 있다.
Func<string, string, string> bar = (string messageA, string messageB) => $"{messageA}{messageB}";
무시 항목을 이용하여 사용하지 않을 매개 변수를 지정할 수 있다.
Func<string, string, string> bar = (_, messageB) => $"{messageB}";
LINQ를 사용할 때도 람다 식을 이용할 수 있다.
List<int> foo = new() { 1, 2, 3, 4, 5 };
var bar = foo.Where(x => x > 3);
Console.WriteLine(string.Join(", ", bar));
/* output:
4, 5
*/
C# 12 버전부터는 람다 식에 선택적 매개 변수 기능이 지원된다.
- 람다 식의 매개 변수에 기본값 설정이 가능하다.
- 람다 식의 매개 변수에 배열 (params) 설정이 가능하다.
var getValue = (int value = 5) => value;
var multiply = (params int[] values) =>
{
int rtn = 1;
foreach (var value in values) rtn *= value;
return rtn;
};
Console.WriteLine(getValue());
Console.WriteLine(multiply(1, 2, 3, 4, 5));
/* output:
5
120
*/
3. 식 본문 정의
식 본문 정의 구문은 다음과 같다.
member => expression;
expression
의 반환 형식은 멤버의 반환 형식이거나 암시적으로 변환할 수 있어야 한다.- 멤버의 형식이 다음과 같은 경우,
expression
은 문 식이어야 한다.- void
- 생성자
- 소멸자
- 프로퍼티 또는 인덱서의 setter
다음은 식 본문 정의의 구현을 보여준다.
internal class Foo
{
private string _name;
public string Property
{
get => _name;
set => _name = value;
}
public string ReadonlyProperty => _name;
public Foo(string name) => _name = name;
public string GetName() => ReadonlyProperty;
}