답변:
(나는 당신이 실제로 여러 줄이 아닌 여러 진술에 대해 이야기하고 있다고 가정합니다.)
중괄호를 사용하여 람다 식에 여러 명령문을 사용할 수 있지만 중괄호를 사용하지 않는 구문 만 표현식 트리로 변환 할 수 있습니다.
// Valid
Func<int, int> a = x => x + 1;
Func<int, int> b = x => { return x + 1; };
Expression<Func<int, int>> c = x => x + 1;
// Invalid
Expression<Func<int, int>> d = x => { return x + 1; };
C # 7부터 :
한 줄 진술 :
int expr(int x, int y) => x + y + 1;
여러 줄로 된 진술 :
int expr(int x, int y) { int z = 8; return x + y + z + 1; };
이것들은 로컬 함수라고하지만, 이것은 다음보다 약간 깨끗해 보이고 실제로 동일하다고 생각합니다
Func<int, int, int> a = (x, y) => x + y + 1;
Func<int, int, int> b = (x, y) => { int z = 8; return x + y + z + 1; };
Func<string, bool> test = (name) =>
{
if (name == "yes") return true;
else return false;
}
에서 람다 식 (C # 프로그래밍 가이드) :
명령문 람다의 본문은 여러 개의 명령문으로 구성 될 수 있습니다. 그러나 실제로는 일반적으로 2 개 또는 3 개를 넘지 않습니다.
수업이 있다고 가정 해 봅시다.
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
이 클래스 안에 C # 7.0을 사용하면 중괄호 없이도 할 수 있습니다.
Action<int, int> action = (x, y) => (_, _) = (X += x, Y += y);
과
Action<int, int> action = (x, y) => _ = (X += x, Y += y);
다음과 같습니다.
Action<int, int> action = (x, y) => { X += x; Y += y; };
정규 메소드 나 생성자를 한 줄에 작성해야하거나 하나 이상의 표현식 / 팩션을 하나의 표현식으로 묶어야하는 경우에도 유용 할 수 있습니다.
public void Action(int x, int y) => (_, _) = (X += x, Y += y);
또는
public void Action(int x, int y) => _ = (X += x, Y += y);
또는
public void Action(int x, int y) => (X, Y) = (X + x, Y + y);
문서에서 튜플의 해체에 대한 자세한 내용 .