C\#Lambda 표현 식 및 Lambda 표현 식 트 리 생 성 과정

9048 단어 C#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.구문 Lambda
lambda 표현 식 에 여러 개의 문구 가 있 을 때 다음 과 같이 쓰 십시오.

(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 
    }
  }
Func의뢰
T 는 매개 변수 유형 으로 일반적인 유형의 의뢰 로 사용 하기에 편리 합 니 다.
먼저 예 를 들다

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 표현 식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기