0Pricing
C# Academy · บทเรียน

การสร้างนิพจน์ด้วยตนเอง

สร้างต้นไม้นิพจน์ด้วย Expression API

การสร้างนิพจน์ด้วยตนเอง เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

การสร้างแผนผังด้วยตนเอง

นอกจากให้คอมไพเลอร์สร้างแผนผังจากแลมบ์ดาแล้ว คุณยังสร้างแผนผังด้วยตนเองได้โดยใช้เมธอดโรงงานแบบ static บน Expression

using System;
using System.Linq.Expressions;

var five = Expression.Constant(5);
Console.WriteLine(five);          // 5
Console.WriteLine(five.Type);     // System.Int32

Expression.Parameter

Expression.Parameter(type, name) สร้างโหนดพารามิเตอร์ที่คุณสามารถอ้างอิงใน body และผูกเข้ากับแลมบ์ดาได้

using System;
using System.Linq.Expressions;

var x = Expression.Parameter(typeof(int), "x");
Console.WriteLine(x.Name + " : " + x.Type); // x : System.Int32

Expression.Constant

Expression.Constant(value) ฝังค่าแบบตัวอักษรไว้ในนิพจน์ คุณสามารถระบุชนิดข้อมูลเพิ่มเติมได้หากต้องการ

using System;
using System.Linq.Expressions;

var c = Expression.Constant(42);
var typed = Expression.Constant(3.14, typeof(double));
Console.WriteLine(c + " " + typed); // 42 3.14

Expression.Add

ตัวดำเนินการไบนารีมีเมธอดโรงงาน เช่น Expression.Add เมธอดเหล่านี้รับนิพจน์ตัวถูกดำเนินการสองตัวแล้วสร้าง BinaryExpression

using System;
using System.Linq.Expressions;

var x = Expression.Parameter(typeof(int), "x");
var sum = Expression.Add(x, Expression.Constant(1));
Console.WriteLine(sum); // (x + 1)

ตัวดำเนินการไบนารีอื่น ๆ

มีเมธอดโรงงานสำหรับชุดตัวดำเนินการทั้งหมด ได้แก่ Subtract, Multiply, Divide, GreaterThan, Equal และอื่น ๆ

using System;
using System.Linq.Expressions;

var x = Expression.Parameter(typeof(int), "x");
var gt = Expression.GreaterThan(x, Expression.Constant(10));
var mul = Expression.Multiply(x, Expression.Constant(2));
Console.WriteLine(gt + " | " + mul); // (x > 10) | (x * 2)

การห่อหุ้มเป็นแลมบ์ดา

Expression.Lambda เชื่อม body และพารามิเตอร์เข้าด้วยกันเป็น Expression<TDelegate> ซึ่งคุณสามารถ Compile ได้ภายหลัง

using System;
using System.Linq.Expressions;

var x = Expression.Parameter(typeof(int), "x");
var body = Expression.Add(x, Expression.Constant(1));
var lambda = Expression.Lambda<Func<int, int>>(body, x);
Console.WriteLine(lambda); // x => (x + 1)

การประกอบนิพจน์ที่ซ้อนกัน

เมธอดโรงงานสามารถซ้อนกันได้อย่างอิสระ คุณจึงสร้างนิพจน์ซับซ้อนอย่าง (x + 1) * 2 ทีละขั้นตอนได้

using System;
using System.Linq.Expressions;

var x = Expression.Parameter(typeof(int), "x");
var addOne = Expression.Add(x, Expression.Constant(1));
var timesTwo = Expression.Multiply(addOne, Expression.Constant(2));
Console.WriteLine(timesTwo); // ((x + 1) * 2)

การเข้าถึงสมาชิก

Expression.Property และ Expression.Field ใช้สร้างโหนดสำหรับการเข้าถึงสมาชิก

using System;
using System.Linq.Expressions;

var s = Expression.Parameter(typeof(string), "s");
var lengthAccess = Expression.Property(s, "Length");
Console.WriteLine(lengthAccess); // s.Length

การเรียกเมธอด

Expression.Call สร้างโหนดการเรียกใช้ โดยรับเป้าหมาย เมธอด และอาร์กิวเมนต์

using System;
using System.Linq.Expressions;

var s = Expression.Parameter(typeof(string), "s");
var toUpper = typeof(string).GetMethod("ToUpper", Type.EmptyTypes);
var call = Expression.Call(s, toUpper);
Console.WriteLine(call); // s.ToUpper()

การตรวจสอบชนิดขณะสร้าง

เมธอดโรงงานจะตรวจสอบชนิดของตัวถูกดำเนินการระหว่างการสร้าง หากชนิดไม่ตรงกันจะเกิดข้อผิดพลาดทันที ทำให้พบข้อผิดพลาดได้ตั้งแต่เนิ่น ๆ

using System;
using System.Linq.Expressions;

try {
    var bad = Expression.Add(
        Expression.Constant(1),
        Expression.Constant("text")); // int + string
} catch (InvalidOperationException) {
    Console.WriteLine("type mismatch rejected");
}

การนำแนวคิดทั้งหมดมาประกอบกัน

สร้างแลมบ์ดา x => (x + 1) * 2 ด้วยตนเองทั้งหมด

using System;
using System.Linq.Expressions;

var x = Expression.Parameter(typeof(int), "x");
var body = Expression.Multiply(
    Expression.Add(x, Expression.Constant(1)),
    Expression.Constant(2));
var lambda = Expression.Lambda<Func<int, int>>(body, x);
Console.WriteLine(lambda); // x => ((x + 1) * 2)

แบบทดสอบสั้น ๆ

ยืนยันความเข้าใจเกี่ยวกับการสร้างนิพจน์ด้วยตนเอง

สรุปทบทวน

คุณได้เรียนรู้การสร้างแผนผังนิพจน์ด้วยตนเอง

  • Expression.Parameter และ Expression.Constant ใช้สร้างโหนดปลายทาง
  • Expression.Add และเมธอดที่เกี่ยวข้องใช้สร้างการดำเนินการแบบไบนารี
  • Expression.Property และ Expression.Call ใช้จัดการสมาชิกและเมธอด
  • Expression.Lambda ใช้ประกอบแผนผังที่เรียกใช้ได้

คำถามที่พบบ่อย

บทเรียน “การสร้างนิพจน์ด้วยตนเอง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างนิพจน์ด้วยตนเอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างนิพจน์ด้วยตนเอง”

สร้างต้นไม้นิพจน์ด้วย Expression API คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การสร้างนิพจน์ด้วยตนเอง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ต้นไม้นิพจน์คืออะไร
  2. การสร้างนิพจน์ด้วยตนเอง
  3. การคอมไพล์และเรียกใช้นิพจน์
  4. ต้นไม้นิพจน์ในผู้ให้บริการ LINQ
← กลับไปที่ C# Academy