C# Academy · Lektion

Tips til komposition

Bevar LINQ-komponerbarheden: brug små, rene prædikater og transformationer, komponer delegates, tilføj små extension-hjælpere, og returnér IEnumerable -pipelines.

Lektion 3 af 38 trin

Tips til komposition er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 3 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 3 lektioner i alt.

Oversigt over komponerbar LINQ

Mål: Gør LINQ let at udvide.

  • Skriv små, rene prædikater og transformationer
  • Sammensæt funktioner (uden sideeffekter)
  • Tilføj små udvidelseshjælpere
  • Returnér IEnumerable<T>-behandlingskæder

Genbrug af rene hjælpefunktioner

Udtræk små rene metoder, og giv dem videre som metodegrupper. Genbrug holder behandlingskæderne korte og letlæselige.

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
  }
}

Sammensætning af prædikater

Byg nye prædikater ved at sammensætte mindre prædikater. Det gør logikken let at teste og genbruge.

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);
  }
}

Letlæselige udvidelser

Tilføj en lille udvidelse for at udtrykke hensigten (f.eks. WhereNot). Hold den enkel og uden sideeffekter.

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
  }
}

Genanvendelige hjælpere til behandlingskæder

Eksponér genanvendelige IEnumerable<T>-hjælpere. Den kaldende kode kan fortsat sammensætte (OrderBy, Take osv.).

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
  }
}

Tjekliste for komponerbarhed

Tips:

  • Foretræk rene hjælpefunktioner; undgå sideeffekter i Select/Where.
  • Sammensæt prædikater og transformationer, og navngiv dem tydeligt.
  • Returnér IEnumerable<T> fra hjælpefunktioner, så kaldere kan udvide kæden.
  • Materialisér sent; undgå ToList midtvejs, medmindre det er nødvendigt.

Bedste praksis for komponerbarhed

Hurtigt tjek: Hvilken praksis holder bedst LINQ-behandlingskæder komponerbare og testbare?

Opsummering

Opsummering: Udtræk små rene hjælpefunktioner, sammensæt prædikater, tilføj små udvidelser, og returnér behandlingskæder, så kaldere kan fortsætte med at kæde dem sammen.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Tips til komposition” gratis?

Ja — hele teksten til “Tips til komposition” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “Tips til komposition”?

Bevar LINQ-komponerbarheden: brug små, rene prædikater og transformationer, komponer delegates, tilføj små extension-hjælpere, og returnér IEnumerable -pipelines. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 3.

Hvor lang tid tager lektionen “Tips til komposition”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. GroupBy, Join, Aggregate og projektioner (anonyme typer)
  2. Materialisering (ToList, ToDictionary) og ydelsesnoter
  3. Tips til komposition
← Tilbage til C# Academy