เคล็ดลับการประกอบใช้งาน
รักษาความสามารถในการประกอบของ LINQ: ใช้เพรดิเคตและการแปลงข้อมูลบริสุทธิ์ขนาดเล็ก ประกอบ delegate เพิ่มตัวช่วยส่วนขยายเล็ก ๆ และคืนไปป์ไลน์ IEnumerable
เคล็ดลับการประกอบใช้งาน เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน
ภาพรวม LINQ ที่ประกอบต่อได้
เป้าหมาย: ทำให้ LINQ ขยายต่อได้ง่าย
- เขียนเงื่อนไขและการแปลงข้อมูลขนาดเล็กที่ไม่มีผลข้างเคียง
- ประกอบฟังก์ชันเข้าด้วยกัน (ไม่มีผลข้างเคียง)
- เพิ่มตัวช่วยส่วนขยายขนาดเล็ก
- ส่งคืนไปป์ไลน์ IEnumerable<T>
การนำตัวช่วยบริสุทธิ์กลับมาใช้
แยกเมธอดบริสุทธิ์ขนาดเล็กออกมา และส่งต่อเป็นกลุ่มเมธอด การนำกลับมาใช้ใหม่ช่วยให้ไปป์ไลน์สั้นและอ่านเข้าใจง่าย
using System;
using System.Linq;
public class Program
{
static bool IsEven(int n) { return n % 2 == 0; } // pure predicate
static int Square(int n) { return n * n; } // pure transform
public static void Main(string[] args)
{
int[] xs = new int[] { 1, 2, 3, 4, 5, 6 };
var q = xs
.Where(IsEven) // reuse predicate
.Select(Square); // reuse transform
foreach (int v in q) Console.WriteLine(v); // 4 16 36
}
}
การประกอบเงื่อนไข
สร้างเงื่อนไขใหม่โดย ประกอบ เงื่อนไขย่อยที่มีขนาดเล็กกว่า วิธีนี้ช่วยให้ตรรกะสามารถทดสอบและนำกลับมาใช้ใหม่ได้
using System;
using System.Linq;
public class Program
{
// Return a predicate n > threshold
static Func<int, bool> GreaterThan(int threshold)
{
return delegate(int n) { return n > threshold; };
}
// Combine two predicates with AND
static Func<int, bool> And(Func<int, bool> a, Func<int, bool> b)
{
return delegate(int n) { return a(n) && b(n); };
}
static bool IsEven(int n) { return n % 2 == 0; }
public static void Main(string[] args)
{
int[] xs = new int[] { 1, 2, 3, 4, 5, 6 };
Func<int, bool> gt2 = GreaterThan(2);
Func<int, bool> evenAndGt2 = And(IsEven, gt2);
var q = xs.Where(evenAndGt2); // even and > 2 => 4,6
foreach (int v in q) Console.WriteLine(v);
}
}
ส่วนขยายที่อ่านเข้าใจง่าย
เพิ่ม ส่วนขยาย ขนาดเล็กเพื่อสื่อเจตนา (เช่น WhereNot) และทำให้เรียบง่ายโดยไม่มีผลข้างเคียง
using System;
using System.Collections.Generic;
using System.Linq;
public static class LinqEx
{
public static IEnumerable<T> WhereNot<T>(this IEnumerable<T> src, Func<T, bool> predicate)
{
foreach (T item in src)
{
if (!predicate(item)) yield return item;
}
}
}
public class Program
{
static bool IsVowel(char c)
{
char x = Char.ToLower(c);
return x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u';
}
public static void Main(string[] args)
{
char[] letters = new char[] { 'a', 'b', 'c', 'e', 'i' };
var consonants = letters.WhereNot(IsVowel);
foreach (char c in consonants) Console.WriteLine(c); // b, c
}
}
ตัวช่วยไปป์ไลน์ที่ใช้ซ้ำได้
เปิดให้ใช้ตัวช่วย IEnumerable<T> ที่นำกลับมาใช้ใหม่ได้ ผู้เรียกสามารถประกอบต่อได้เรื่อย ๆ (OrderBy, Take และอื่น ๆ)
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
static bool IsEven(int n) { return n % 2 == 0; }
static int Square(int n) { return n * n; }
// Reusable pipeline helper: filter evens and square
public static IEnumerable<int> SquaresOfEvens(IEnumerable<int> xs)
{
foreach (int x in xs)
{
if (IsEven(x)) yield return Square(x);
}
}
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
var pipeline = SquaresOfEvens(data); // composable
var topTwo = pipeline.OrderByDescending(x => x).Take(2);
foreach (int v in topTwo) Console.WriteLine(v); // 36, 16
}
}
รายการตรวจสอบการประกอบต่อ
เคล็ดลับ:
- ควรใช้ตัวช่วยที่ บริสุทธิ์ และหลีกเลี่ยงผลข้างเคียงภายใน Select/Where
- ประกอบเงื่อนไขและการแปลงข้อมูลเข้าด้วยกัน พร้อมตั้งชื่อให้ดี
- ส่งคืน IEnumerable<T> จากตัวช่วย เพื่อให้ผู้เรียกต่อห่วงโซ่ได้
- สร้างคอลเลกชันจริงในช่วงท้าย และหลีกเลี่ยงการใช้ ToList ตรงกลางเว้นแต่จำเป็น
แนวทางปฏิบัติที่ดีที่สุดเพื่อการประกอบต่อ
สรุป
สรุป: แยกตัวช่วยบริสุทธิ์ขนาดเล็ก ประกอบเงื่อนไข เพิ่มส่วนขยายขนาดเล็ก และส่งคืนไปป์ไลน์เพื่อให้ผู้เรียกเชื่อมต่อห่วงโซ่ต่อได้
คำถามที่พบบ่อย
บทเรียน “เคล็ดลับการประกอบใช้งาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เคล็ดลับการประกอบใช้งาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เคล็ดลับการประกอบใช้งาน”
รักษาความสามารถในการประกอบของ LINQ: ใช้เพรดิเคตและการแปลงข้อมูลบริสุทธิ์ขนาดเล็ก ประกอบ delegate เพิ่มตัวช่วยส่วนขยายเล็ก ๆ และคืนไปป์ไลน์ IEnumerable คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “เคล็ดลับการประกอบใช้งาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- GroupBy, Join, Aggregate และการฉายผล (ชนิดนิรนาม)
- การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ
- เคล็ดลับการประกอบใช้งาน