C\#람 다 지식 회고

5976 단어 C#Lambda
순서.

그것 은 열 한 번 째 그리스 자모 로 실의,어 쩔 수 없 음,고독,저조 등의 의 미 를 가 진 유행 기호 이자'반년 명'이 라 고 불 리 는 게임 을 가리킨다.
하지만 이번에 내 가 말 한 것 은 C\#중의 Lambda 이다.
목차
Lambda 소개
Lambda 표현 식
Lambda 구문
비동기 LambdaLINQ 에서 Lambda 를 사용 합 니 다Lambda 의 유형 추정Lambda 의 변수 사용 범위Lambda 의 특징
람 다 소개
Lambda 표현 식 은 간단 한 익명 함수 로 의뢰 나 표현 식 디 렉 터 리 트 리 를 만 드 는 데 사용 할 수 있 습 니 다.그 다음 에 Lambda 표현 식 을 매개 변수 로 전달 하거나 함수 호출 값 을 호출 한 후에 돌아 오 는 함수 에 사용 할 수 있 습 니 다.우 리 는 LINQ 에서 Lambda 표현 식 을 자주 사용한다.
Lambda 표현 식 을 만 드 는 간단 한 문법 형식:매개 변수=>표현 식 이나 구문 블록 을 입력 하 십시오.그 중에서=>Lambda 연산 자 입 니 다.'goes to'로 읽 을 수 있 습 니 다.

delegate int MyDel(int x); 
 static void Main(string[] args) 
 { 
  MyDel myDel = x => x++; 
  var j = myDel(5); 
 }
표현 식 트 리 만 들 기:Expression<MyDel> myDel = x => x++;  =>연산 자 와=연산 자(할당 연산 자)는 같은 우선 순 위 를 가지 고 있 으 며 모두 오른쪽 결합 연산 입 니 다.
Where와 같은 인자 로 LINQ 조회 에서 Lambda 표현 식 을 자주 사용 합 니 다.이 방법 은 여러 개의 무 거 운 짐 이 있 는데,여기 에는 그 중의 하나 만 열거 되 어 있다.

//
  //   : 
  //           。
  //
  //   : 
  // source:
  //       System.Collections.Generic.IEnumerable<T>。
  //
  // predicate:
  //                   。
  //
  //     : 
  // TSource:
  //  source        。
  //
  //     : 
  //     System.Collections.Generic.IEnumerable<T>,              。
  //
  //   : 
  // System.ArgumentNullException:
  //  source   predicate   null。
  public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
인 자 는 의뢰 형식 Funcpredicate)입 니 다.Lambda 표현 식 을 사용 하여 만 드 는 것 이 가장 적합 하 다 고 생각 합 니 다.또한,매개 변수 형식 이 추상 적 인 System.Linq.Expressions.Expression라면,Func 의뢰 는 16 개의 매개 변 수 를 다시 불 러 오 는 것 이 며,Lambda 표현 식 으로 대응 하 는 표현 식 트 리 를 만 들 수도 있 습 니 다.
[주의]is 나 as 연산 자의 왼쪽 에 Lambda 표현 식 을 사용 할 수 없습니다.
 Lambda 표현 식
표현 식 은=>연산 자 오른쪽 에 있 습 니 다."lambda 표현 식"이 라 고 합 니 다.lambda 표현 식 은 LINQ 와 표현 식 트 리 구축 에 자주 사용 되 며 결 과 를 되 돌 릴 수 있 습 니 다.
기본 형식:(매개 변수 입력)=>표현 식.
예:

  ( ) => true;
   x => x == 1;
  (x) => x == 1; 
  (x, y) => x == y;
[비고]lambda 표현 식 이 있 고 하나의 입력 매개 변수 만 있 을 때 괄호("()")가 선택 할 수 있 습 니 다.괄호 안에 여러 개의 입력 매개 변수 가 존재 할 때","분할 합 니 다.
 컴 파 일 러 가 입력 형식 을 정확하게 추측 하기 어 려 울 때 만 현식 지정 형식 을 선택 할 수 있 습 니 다.Func<int, int, bool> func = (int x, int y) => x == y;여기에 빈 괄호("()")를 사용 하여 0 개의 입력 인 자 를 지정 하고 Lambda 의 주체 에 하나 이상 의 방법 을 포함 하여 호출 할 수 있 습 니 다.() => YourMethod()  Lambda 구문
lambda 문 구 는 위의 lambda 표현 식 에 비해 큰 괄호("{}")만 더 있 을 뿐 입 니 다. 
기본 형식:(인자 입력)=>{표현 식}.
lambda 문장의 주 체 는 임의의 수량의 일반 문장 으로 구성 할 수 있 지만,우리 가 일반적으로 쓰 는 문장 은 많 지 않다(세 개 정도).

delegate void MyDel(string s); 
// ...
MyDel myDel = n => { var s = n + " Fanguzai!"; Console.WriteLine(s); }; 
myDel("Hi,");
비동기 람 다
async 와 await 키 워드 를 통 해 비동기 처 리 를 포함 한 lambda 표현 식 과 문 구 를 간단 하고 빠르게 만 들 수 있 습 니 다.
여기 서 저 는 간단 한 비동기 호출 방식 을 사용 하여 실행 단 추 를 누 르 면 발생 하 는 클릭 이 벤트 를 작성 합 니 다.즉,비동기 방법 DoAsync 를 호출 합 니 다.

public partial class Form1 : Form 
{ 
 public Form1() 
 { 
  InitializeComponent(); 
 } 
 private async void button1_Click(object sender, EventArgs e) 
 { 
  await DoAsync(); 
 } 
 async Task DoAsync() 
 { 
  await Task.Delay(250); 
 } 
}
현재 위의 Click 이 벤트 를 간소화 하고 async 를 추가 합 니 다.

public partial class Form1 : Form 
{ 
 public Form1() 
 { 
  InitializeComponent(); 
  button1.Click += async (sender, e) => 
  { 
   await DoAsync(); 
  }; 
 } 
 async Task DoAsync() 
 { 
  await Task.Delay(250); 
 } 
}
LINQ 에서 Lambda 를 사용 합 니 다.
많은 LINQ 의 매개 변 수 는 Func와 같은 의뢰 형식의 매개 변수 로 입력 매개 변수 와 반환 유형 을 정의 할 수 있 습 니 다.public delegate TResult Func<TArg0, TResult>(TArg0 arg0)  Func은 int 는 입력 매개 변수 이 고 bool 은 반환 값 입 니 다.
Func은 2 개의 int 는 입력 매개 변수 이 고,하 나 는 bool 은 반환 값 입 니 다.
예시:

Func<int, bool> myFunc = x => x == 250; 
var result = myFunc(1314); 
C\#의 컴 파일 러 는 입력 매개 변수의 유형 을 자동 으로 추정 할 수 있 습 니 다.여러 개의 입력 매개 변수 라 도 물론 명시 적 지정 을 선택 할 수 있 습 니 다.

var nums = new[] { 2, 5, 0 };
var query = nums.Count(x => x > 2);
var query2 = nums.Count<int>(x => x < 2);
[비고]=>와>=을 잘못 알 지 마 세 요.전 자 는 Lambda 연산 자 이 고 후 자 는 산술 비교 연산 자 입 니 다.
Lambda 의 유형 추정
컴 파일 러 는 Lambda 주체,매개 변수의 위탁 유형 과 C\#언어 규범 과 기타 등 일부 요소 에 따라 우리 가 쓴 Lambda 를 유형 으로 추정 합 니 다.

여기 서 원본 데 이 터 는 int 배열 입 니 다.즉,제 가 찾 으 려 는 데 이 터 는 IEnumerable형식 이기 때문에 컴 파일 러 는 여기 서 요 소 를 int 형식 으로 자동 으로 추정 합 니 다.이 는 Count 방법 에 있 는 x 를 통 해 int 형식 에 대응 하 는 속성 과 방법 을 표시 할 수 있 음 을 의미 합 니 다.
Lambda 의 변수 사용 범위
우 리 는 Lambda 의 주체 에서 범위 밖의 변 수 를 인용 할 수 있 습 니 다.예:

var nums = new[] { 2, 5, 0 }; //int[]   
var compareNum = 2.5;
var query = nums.Count(x => x == compareNum); 
Lambda 의 특징
  • Lambda 에 입력 매개 변 수 를 포함 하 는 수량 은 의뢰 유형 에 포 함 된 매개 변수 수량 과 일치 해 야 합 니 다
  • Lambda 의 모든 입력 매개 변 수 는 암시 적 으로 해당 하 는 위탁 매개 변수 유형 으로 전환 할 수 있어 야 합 니 다
  • Lambda 의 반환 값(있 으 면)은 의뢰 의 반환 형식 으로 암시 적 으로 변환 할 수 있어 야 합 니 다
  • 이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기