C\#람 다 지식 회고
그것 은 열 한 번 째 그리스 자모 로 실의,어 쩔 수 없 음,고독,저조 등의 의 미 를 가 진 유행 기호 이자'반년 명'이 라 고 불 리 는 게임 을 가리킨다.
하지만 이번에 내 가 말 한 것 은 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
//
// :
// 。
//
// :
// 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);
인 자 는 의뢰 형식 Func[주의]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)
FuncFunc
예시:
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
Lambda 의 변수 사용 범위
우 리 는 Lambda 의 주체 에서 범위 밖의 변 수 를 인용 할 수 있 습 니 다.예:
var nums = new[] { 2, 5, 0 }; //int[]
var compareNum = 2.5;
var query = nums.Count(x => x == compareNum);
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에 따라 라이센스가 부여됩니다.