C#의 표현식 트리에 대한 간략한 소개
표현나무는 Linq의 핵심 중 하나라고 할 수 있습니다. 왜 Linq의 핵심 중 하나인가요? 표현식 트리는 C#이 더 이상 단순히 IL로 컴파일되지 않도록 하기 때문에 C#을 통해 표현식 트리를 생성하고 그 결과를 중간 형식으로 사용하고 대상 플랫폼에서 기본 언어로 변환할 수 있습니다. SQL과 같은. 이것이 우리가 일반적으로 사용하는 Linq to sql이 SQL을 생성하는 방법입니다.
Expression tree는 .NET 3.5 이후에 도입된 강력하고 유연한 도구입니다(예: LINQ에서 동적 쿼리를 구성하는 데 사용됨).
먼저 Expression 클래스의 API 인터페이스를 살펴보겠습니다.
namespace System.Linq.Expressions { // // 摘要: // 以表达式目录树的形式将强类型 lambda 表达式表示为数据结构。此类不能被继承。 // // 类型参数: // TDelegate: // System.Linq.Expressions.Expression`1 表示的委托的类型。 public sealed class Expression<TDelegate> : LambdaExpression { // // 摘要: // 将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托。 // // 返回结果: // 一个 TDelegate 类型的委托,它表示由 System.Linq.Expressions.Expression`1 描述的已编译的 lambda 表达式。 public TDelegate Compile(); // // 摘要: // 生成表示 lambda 表达式的委托。 // // 参数: // debugInfoGenerator: // 编译器用于标记序列点并批注局部变量的调试信息生成器。 // // 返回结果: // 包含 lambda 的已编译版本的委托。 public TDelegate Compile(DebugInfoGenerator debugInfoGenerator); // // 摘要: // 创建一个与此表达式类似的新表达式,但使用所提供的子级。如果所有子级都相同,则将返回此表达式。 // // 参数: // body: // 结果的 System.Linq.Expressions.LambdaExpression.Body 属性。 // // parameters: // 结果的 System.Linq.Expressions.LambdaExpression.Parameters 属性。 // // 返回结果: // 此表达式(如果未更改任何子级),或带有更新的子级的表达式。 public Expression<TDelegate> Update(Expression body, IEnumerable<ParameterExpression> parameters); protected internal override Expression Accept(ExpressionVisitor visitor); } }
익스프레션 트리의 구문은 다음과 같습니다.
Expression<Func<type,returnType>> = (param) => lamdaexpresion;
예:
Expression<Func<int, int, int>> expr = (x, y) => x+y;
위 코드를 실행합니다. VS 디버깅 시뮬레이션 표현식 트리에서 이를 확인하세요.
표현식 트리는 주로 다음 네 부분으로 구성되어 있음을 알 수 있습니다.
1. 본문 주요 부분
2.
3. NodeType 노드 유형
4. 람다 표현식 유형
위 코드에서 본체는 x+y이고, 매개변수는 (x, y)이고, NodeType은 람다 표현식입니다. 반환 값은 int주요 부분은 표현식일 수 있지만 명령문은 포함할 수 없습니다. 예를 들어, 대리자를 정의하면 람다 표현식은Func<int, int, int> func = (x, y) => x + y;
Func<int, int, int> func = (x, y) => { return x + y; };
문 본문이 있는 람다 식을 식 트리로 변환할 수 없습니다.
위의 작성 방법 외에도 표현식 트리를 다음과 같이 작성할 수도 있습니다.
ParameterExpression pex1 = Expression.Parameter(typeof(int), "x");//第一个参数 ParameterExpression pex2 = Expression.Parameter(typeof(int), "y");//第二个参数 BinaryExpression bexp = Expression.Add(pex1, pex2);//加法 var lambdaExp = Expression.Lambda<Func<int, int, int>>(bexp, new ParameterExpression[] {pex1,pex2 });
표현 교체 대리자로 컴파일된 트리
LambdaExpression은 Expression에서 파생된 유형입니다. 일반 클래스 ExpressionExpression<Func<int, int, int>> expr = (x, y) => x + y; ParameterExpression pex1 = Expression.Parameter(typeof(int), "x");//第一个参数 ParameterExpression pex2 = Expression.Parameter(typeof(int), "y");//第二个参数 BinaryExpression bexp = Expression.Add(pex1, pex2);//主体,加法 //使用Expression.Lambda方法,创建一个委托类型已知的Expression Expression<Func<int,int,int>> lambdaExp = Expression.Lambda<Func<int, int, int>>(bexp, new ParameterExpression[] { pex1, pex2 }); Func<int,int,int> tDelegate = lambdaExp.Compile();//编译成委托 Console.WriteLine(tDelegate(1, 3)); Console.Read();
위 내용은 C#의 표현식 트리에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

오늘날 인공지능(AI) 기술 개발은 본격화되고 있으며, 다양한 분야에서 큰 잠재력과 영향력을 보여주고 있습니다. 오늘 Dayao는 여러분에게 몇 가지 참고 자료를 제공하고자 4개의 .NET 오픈 소스 AI 모델 LLM 관련 프로젝트 프레임워크를 공유할 것입니다. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel은 OpenAI, Azure와 같은 대규모 언어 모델(LLM)을 통합하도록 설계된 오픈 소스 소프트웨어 개발 키트(SDK)입니다.

.NET 개발자라면 고품질 소프트웨어 제공에 있어 기능과 성능 최적화의 중요성을 인식해야 합니다. 제공된 리소스를 전문적으로 활용하고 웹 사이트 로드 시간을 줄임으로써 사용자에게 즐거운 경험을 선사할 뿐만 아니라 인프라 비용도 절감할 수 있습니다.

높은 동시성 요청 처리 측면에서 .NETASP.NETCoreWebAPI는 JavaSpringMVC보다 성능이 뛰어납니다. 그 이유는 다음과 같습니다. 시작 시간을 줄여주는 AOT 조기 컴파일, 개발자가 개체 메모리 할당 및 해제를 담당하는 경우.

고급 프로그래밍 언어인 Python은 배우고 사용하기 쉽습니다. Python 프로그램을 작성해야 하면 필연적으로 구문 오류가 발생하며 표현식 구문 오류는 흔한 오류입니다. 이 기사에서는 Python에서 표현식 구문 오류를 해결하는 방법에 대해 설명합니다. 표현식 구문 오류는 Python에서 가장 일반적인 오류 중 하나이며 일반적으로 구문을 잘못 사용하거나 필요한 구성 요소가 누락되어 발생합니다. Python에서 표현식은 일반적으로 숫자, 문자열, 변수 및 연산자로 구성됩니다. 가장 흔한

C#.NET 인터뷰 질문 및 답변에는 기본 지식, 핵심 개념 및 고급 사용이 포함됩니다. 1) 기본 지식 : C#은 Microsoft가 개발 한 객체 지향 언어이며 주로 .NET 프레임 워크에 사용됩니다. 2) 핵심 개념 : 위임 및 이벤트는 동적 바인딩 방법을 허용하고 LINQ는 강력한 쿼리 기능을 제공합니다. 3) 고급 사용 : 비동기 프로그래밍은 응답 성을 향상시키고 표현 트리는 동적 코드 구성에 사용됩니다.

이름에서 알 수 있듯이 람다 표현식은 화살표 기호(->)를 핵심으로 하는 익명 함수입니다. 이를 통해 코드 블록을 다른 메서드에 인수로 전달하거나 나중에 사용하기 위해 변수에 저장할 수 있습니다. 람다식 구문은 간결하고 이해하기 쉬우며 데이터 흐름 처리 및 병렬 컴퓨팅에 매우 적합합니다. 1. 람다식의 기본 구문 람다식의 기본 구문은 다음과 같습니다. (매개변수 목록)->{코드 블록} 그 중 매개변수 목록과 코드 블록은 선택 사항입니다. 매개변수가 하나만 있는 경우 괄호를 생략할 수 있습니다. 코드 블록이 한 줄이면 중괄호를 생략할 수 있습니다. 예를 들어 다음 코드 블록은 Lambda 표현식을 사용하여 숫자에 1을 더합니다.

C#은 Microsoft가 개발 한 최신 객체 지향 프로그래밍 언어이며 .NET 프레임 워크의 일부로 개발되었습니다. 1.C#은 캡슐화, 상속 및 다형성을 포함한 객체 지향 프로그래밍 (OOP)을 지원합니다. 2. C#의 비동기 프로그래밍은 응용 프로그램 응답 성을 향상시키기 위해 비동기 및 키워드를 기다리는 키워드를 통해 구현됩니다. 3. LINQ를 사용하여 데이터 컬렉션을 간결하게 처리하십시오. 4. 일반적인 오류에는 NULL 참조 예외 및 인덱스 외 예외가 포함됩니다. 디버깅 기술에는 디버거 사용 및 예외 처리가 포함됩니다. 5. 성능 최적화에는 StringBuilder 사용 및 불필요한 포장 및 Unboxing을 피하는 것이 포함됩니다.
