C\#Lambda 표현 식 및 Lambda 표현 식 트 리 생 성 과정
주제 밖의 말 을 많이 했 으 니,우 리 는 본론 으로 들 어가 자.
지난 절 에서 우 리 는 2.0 이전의 C\#버 전에 서 의뢰 를 설명 하 는 유일한 방법 은 명명 방법 을 사용 하 는 것 이 라 고 말 했다.C\#2.0 은 익명 방법 을 도 입 했 고 C\#3.0 및 더 높 은 버 전에 서 Lambda 표현 식 은 익명 방법 을 대체 하여 내 연 코드 를 작성 하 는 첫 번 째 방법 으로 사용 되 었 습 니 다.익명 방법 은 Lambda 표현 식 에 없 는 기능 을 제공 하 는 경우 가 있 습 니 다.인자 목록 을 익명 으로 무시 할 수 있 습 니 다.익명 의 방법 이 각종 서명 을 가 진 의뢰 로 바 뀔 수 있다 는 뜻 이다.이것 은 Lambda 표현 식 에 있어 서 불가능 합 니 다.lambda 표현 식 에 대한 더 많은 특정 정 보 는 Lambda 표현 식(C\#프로 그래 밍 안내)을 참조 하 십시오.
1.표현 식 Lambda
표현 식 은=>연산 자 오른쪽 에 있 는 lambda 표현 식 을'표현 식 lambda'라 고 합 니 다.표현 식 lambda 는 표현 식 의 결 과 를 되 돌려 주 고 다음 과 같은 기본 형식 을 사용 합 니 다.
(input parameters) => expression
lambda 가 하나의 입력 매개 변수 만 있 을 때 괄호 만 선택 할 수 있 습 니 다.그렇지 않 으 면 괄호 가 필요 하 다.괄호 안에 있 는 두 개 이상 의 입력 매개 변 수 는 쉼표 로 구분 합 니 다.
(x, y) => x == y
컴 파일 러 가 입력 형식 을 추측 하기 어렵 거나 추측 할 수 없 을 때 도 있다.만약 이러한 상황 이 발생 한다 면 다음 예제 에서 보 여 준 방식 으로 유형 을 명시 할 수 있 습 니 다.
(int x, string s) => s.Length > x
빈 괄호 로 0 개의 입력 매개 변 수 를 지정 합 니 다:
() => SomeMethod()
2.구문 Lambdalambda 표현 식 에 여러 개의 문구 가 있 을 때 다음 과 같이 쓰 십시오.
(input parameters) => {statement;}
예 를 들 면:
delegate void TestDelegate(string s);
…
TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s); };
myDel("Hello");
사용 예:
List<string> Citys = new List<string>()
{
"BeiJing",
"ShangHai",
"Tianjin",
"GuangDong"
};
var result1 = Citys.First(c => c.Length > 7);
Console.WriteLine(result1);
var result2 = Citys.Where(c => c.Length > 7);
foreach(var r in result2)
{
Console.WriteLine(r);
}
Console.ReadKey();
이것 은 모두 가 잘 아 는 LINQ 문구 입 니 다.배 운 적 이 없 으 면 괜 찮 습 니 다.여 기 는 아주 간단 한 몇 가지 방법 만 사용 하고 있 을 뿐 모두 가 알 아 볼 수 있 을 것 이 라 고 믿 습 니 다.
먼저 Citys 집합 을 정의 하고 데이터 가 초기 화 됩 니 다.그리고 LINQ 의 first 방법 을 호출 하여 길이 가 7 이상 인 첫 번 째 결 과 를 조회 합 니 다.보 셨 죠?여기 서 사용 하 는 것 은 Lambda 표현 식 입 니 다.
만약 에 우리 가 직접 쓰 고 반복 해서 집합 을 한 다음 에 문자열 의 길이 가 7 보다 큰 지 판단 하려 면 적어도 네 다섯 줄 의 코드 를 써 야 한다.여 기 는 한 줄 이면 충분 하고 LINQ 도 길 게 써 야 한다.
가장 간단 한 Lambda 표현 식(input parameters)=>expression 형식 을 사용 합 니 다.
Lambda 표현 식 을 어떻게 정의 하고 사용 하 는 지 다음 함수 부터 쓰 겠 습 니 다.
public void LambdaFun(string str,Func<string,string> func)
{
Console.WriteLine(func(str));
}
여기 Func
LambdaFun("BeiJing 2013", s =>
{
if (s.Contains("2013"))
{
s = s.Replace("2013", "2014");
}
return s;
});
문자열 에 들 어 오 는 2013 을 2014 로 바 꿉 니 다.물론 다른 문자열 을 도시 의 모든 내용 으로 바 꾸 거나 캡 처,연결 등 우리 가 들 어 오 는 Lambda 표현 식 에 의 해 결정 할 수 있 습 니 다.여기 서 Lambda 표현 식 의 강 함 을 느 낄 수 있 습 니 다.빨간색 의 뜻 을 요약 하면 마이크로 소프트 는 우리 가 C\#2.0 이전에 의뢰 를 했 고 2.0 이후 에 익명 의 방법 을 도입 했다.C\#3.0 이후 에 Lambda 표현 식 을 도입 했다.그들 세 사람 사이 의 순 서 는 의뢰->익명 변수->Lambda 표현 식,마이크로소프트 의 한 단계 업그레이드 로 우리 에 게 프로 그래 밍 의 아름다움,간결 함,가 독성 이 강하 다 는 것 이다.마이크로소프트 를 많이 칭찬 하지 않 는 다.그들 이 이 블 로 그 를 보고 자 랑스 러 워 할 까 봐,꼬리 를 하늘 로 치 켜 올 릴 까 봐,하늘 높 은 줄 도 모 르 고,땅 이 두 꺼 운 줄 도 모른다.헤헤,말 이 많아!
옛 것 을 배우 고 새 것 을 알 면 선생님 이 될 수 있 습 니 다.우 리 는 온 고 를 통 해 의뢰 와 익명 표현 식 을 드 리 겠 습 니 다.
의뢰 는 다음 과 같 습 니 다:
delegate int calculator(int x, int y); //
static void Main()
{
calculator cal = new calculator(Adding);
int He = cal(1, 1);
Console.Write(He);
}
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public static int Adding(int x, int y)
{
return x + y;
}
익명 방법 은 다음 과 같다.
delegate int calculator(int x, int y); //
static void Main()
{
calculator cal = delegate(int num1,int num2)
{
return num1 + num2;
};
int he = cal(1, 1);
Console.Write(he);
}
다음은 Lambda 표현 식 을 설명 하 겠 습 니 다.위의 덧셈 에 따라 우 리 는 Lambda 표현 식 으로 이 루어 집 니 다.코드 는 다음 과 같 습 니 다.
delegate int calculator(int x, int y); //
static void Main()
{
calculator cal = (x, y) => x + y;//Lambda , ,
int he = cal(1, 1);
Console.Write(he);
}
그럼 Lambda 표현 식 에 대해 자세히 말씀 드 리 겠 습 니 다.Lambda 표현 식 을 만 들 려 면 Lambda 연산 자=>왼쪽 에 입력 매개 변 수 를 지정 한 다음 다른 쪽 에 표현 식 이나 문 구 를 입력 해 야 합 니 다.예 를 들 어 lambda 표현 식 x=>x*x 는 x 라 는 매개 변 수 를 지정 하고 x 의 제곱 값 을 되 돌려 줍 니 다.위의 예제 에서 보 듯 이 이 표현 식 을 의뢰 형식 에 할당 할 수 있 습 니 다.
"Lambda 표현 식"은 특수 한 익명 함수 로 함수 식 프로 그래 밍 과 효율 적 인 표현 식 입 니 다.Lambda 는 개발 에 필요 한 코드 양 을 간소화 합 니 다.표현 식 과 문 구 를 포함 할 수 있 으 며,의뢰 나 표현 식 디 렉 터 리 트 리 형식 을 만 드 는 데 사용 할 수 있 으 며,의뢰 나 표현 식 트 리 에 연결 할 수 있 는 입력 매개 변 수 를 가 진 내 연 표현 식 을 지원 합 니 다.모든 Lambda 표현 식 은 Lambda 연산 자=>를 사용 합 니 다.이 연산 자 는"goes to"로 읽 습 니 다.Lambda 연산 자의 왼쪽 은 입력 매개 변수(있 으 면)이 고 오른쪽 은 표현 식 이나 구문 블록 입 니 다.Lambda 표현 식 x=>x*x 는"x goes to x times x"로 읽 습 니 다.간단 한 Lambda 표현 식 을 몇 개 들 어 보 겠 습 니 다.다음 과 같 습 니 다.
delegate bool MyBol(int x, int y);
delegate bool MyBol_2(int x, string y);
delegate int calculator(int x, int y); //
delegate void VS();
static void Main()
{
MyBol Bol = (x, y) => x == y;
MyBol_2 Bol_2 = (x, s) => s.Length > x;
calculator C = (X, Y) => X * Y;
VS S = () => Console.Write(" Labada ");
//
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n % 2 == 1);
//
List<People> people = LoadData();//
IEnumerable<People> results = people.Where(delegate(People p) { return p.age > 20; });
}
private static List<People> LoadData()
{
List<People> people = new List<People>(); //
People p1 = new People(21, "guojing"); //
People p2 = new People(21, "wujunmin"); //
People p3 = new People(20, "muqing"); //
People p4 = new People(23, "lupan"); //
people.Add(p1); //
people.Add(p2); //
people.Add(p3); //
people.Add(p4);
return people;
}
}
public class People
{
public int age { get; set; } //
public string name { get; set; } //
public People(int age, string name) // ( )
{
this.age = age; // age
this.name = name; // name
}
}
FuncT 는 매개 변수 유형 으로 일반적인 유형의 의뢰 로 사용 하기에 편리 합 니 다.
먼저 예 를 들다
static void Main(string[] args)
{
Func<int, string> gwl = p => p + 10 + "-- string";
Console.WriteLine(gwl(10) + ""); // ‘20-- string',z b,p a
Console.ReadKey();
}
설명:여기 p 는 int 형식 매개 변수 이지 만 lambda 주 체 는 string 형식 으로 돌아 가 는 것 을 볼 수 있 습 니 다.다음 예
static void Main(string[] args)
{
Func<int, int, bool> gwl = (p, j) =>
{
if (p + j == 10)
{
return true;
}
return false;
};
Console.WriteLine(gwl(5,5) + ""); // ‘True',z b,p a
Console.ReadKey();
}
설명:이 예 에서 볼 수 있 듯 이 p 는 int 형식 이 고 j 는 int 형식 이 며 반환 값 은 bool 형식 입 니 다.이로써 위의 내용 을 모두 알 아 볼 수 있다 면 람 다 는 아무것도 아 닙 니 다!
C\#Lambda 표현 식 및 Lambda 표현 식 트 리 의 생 성 과정 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C\#Lambda 표현 식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.