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

เคล็ดลับการประกอบใช้งาน

รักษาความสามารถในการประกอบของ 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 ตรงกลางเว้นแต่จำเป็น

แนวทางปฏิบัติที่ดีที่สุดเพื่อการประกอบต่อ

ตรวจสอบสั้น ๆ: แนวทางปฏิบัติใดช่วยให้ไปป์ไลน์ LINQ ประกอบต่อและทดสอบได้ดีที่สุด

สรุป

สรุป: แยกตัวช่วยบริสุทธิ์ขนาดเล็ก ประกอบเงื่อนไข เพิ่มส่วนขยายขนาดเล็ก และส่งคืนไปป์ไลน์เพื่อให้ผู้เรียกเชื่อมต่อห่วงโซ่ต่อได้

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

บทเรียน “เคล็ดลับการประกอบใช้งาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เคล็ดลับการประกอบใช้งาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. GroupBy, Join, Aggregate และการฉายผล (ชนิดนิรนาม)
  2. การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ
  3. เคล็ดลับการประกอบใช้งาน
← กลับไปที่ C# Academy