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.
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
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.
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
- GroupBy, Join, Aggregate og projektioner (anonyme typer)
- Materialisering (ToList, ToDictionary) og ydelsesnoter
- Tips til komposition