728x90
우선 Func 람다 형식은 표현식(Expression)람다와 문(Statement)람다 2가지가 존재한다.
표현식(Expression) 람다: 하나의 표현식으로만 구성된 람다입니다. 이 경우 return 키워드를 사용하지 않고, 람다의 결과는 그 표현식 자체가 됩니다.
Func<int, int> square = x => x * x; // 표현식 람다
문(Statement) 람다: 중괄호 {}를 사용하여 여러 문으로 구성된 람다입니다. 이 경우 return 키워드를 사용할 수 있습니다.
Func<int, int> square = x =>
{
int result = x * x;
return result; // 문 람다에서는 return 사용 가능
};
C#에서 CS0834 오류는 "A lambda expression with a statement body cannot be converted to an expression tree"라는 에러 메시지를 나타내며, 이는 문 람다(statement lambda)가 표현식 트리(Expression Tree)로 변환될 수 없기 때문에 발생합니다.
즉 표현식 트리로의 변환 요구를 명시적으로 작성해서 일어나는 문제로 표현식 트리는 코드를 표현식 형태로 저장하는 데이터 구조로, 단일 표현식만을 포함할 수 있고, 문 람다(중괄호를 사용하여 여러 문을 포함하는 람다)는 포함할 수 없습니다.
// Expression<Func<int, int>>를 매개변수로 받는 함수
void UseExpressionTree(Expression<Func<int, int>> expr)
{
// 표현식 트리를 처리하는 코드
}
// 표현식 람다는 정상적으로 작동합니다.
UseExpressionTree(x => x * x); // OK
// 문 람다는 오류를 발생시킵니다.
UseExpressionTree(x =>
{
int result = x * x;
return result; // CS0834 오류 발생
});
728x90
'VisualStudio > C#' 카테고리의 다른 글
[C#] is 와 as (0) | 2024.05.27 |
---|---|
[C#] AES128 암호화 (0) | 2024.05.07 |
[프로그래머스/C++] 조건에 맞게 수열 변환하기 2 (0) | 2024.03.07 |
[C#] 데이터베이스 종류 (0) | 2023.11.08 |
[C#] Google Protobuf형식 기반 ProtoBuff-net 사용 방법 (0) | 2023.11.02 |