C# Academy · Oppitunti

IEnumerable<T>-putket ja viivästetty suoritus

Rakentakaa LINQ-putkia IEnumerable -kokoelmien päälle ja tutustukaa viivästetyn suorituksen sekä ToList- tai ToArray-materialisoinnin eroon.

Oppitunti 1/38 vaihetta

IEnumerable<T>-putket ja viivästetty suoritus on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 3 oppituntia.

LINQ-putken idea

Putki = operaattoreiden ketju, joka muuntaa sekvenssin.

  • Lähde: IEnumerable<T>
  • Operaattorit: Where, Select jne.
  • Kohde: luettelointi (foreach) tai materialisointi (ToList)

Where + Select

Luo ketju ensin Where- ja sitten Select-operaattorilla. Kysely suoritetaan, kun iteroit sekvenssiä.

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] numbers = new int[] { 1, 2, 3, 4, 5 };

    // Build pipeline: keep even numbers, then square them
    var query = numbers
      .Where(n => n % 2 == 0)
      .Select(n => n * n);

    foreach (int x in query)
    {
      Console.WriteLine(x); // 4, 16
    }
  }
}

Viivästetyn suorituksen vaikutus

Viivästetty suoritus: kysely arvioidaan luetteloinnin aikana, joten lähteeseen myöhemmin tehdyt muutokset voivat näkyä tuloksissa.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    List<int> data = new List<int>();
    data.Add(1);
    data.Add(2);

    var evens = data.Where(x => x % 2 == 0); // query is not executed yet

    data.Add(3);
    data.Add(4); // modify source after building query

    foreach (int e in evens)
    {
      Console.WriteLine(e); // prints 2 and 4 because execution is deferred
    }
  }
}

Materialisointi (ToList)

Materialisoi sekvenssi nyt käyttämällä ToList- tai ToArray-operaattoria, jotta myöhemmät lähteen muutokset eivät vaikuta tuloksiin.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    List<string> words = new List<string>();
    words.Add("apple");
    words.Add("banana");

    var longOnes = words.Where(w => w.Length >= 6);
    List<string> snapshot = longOnes.ToList(); // materialize now

    words.Add("pear");     // changes after materialization
    words.Add("cherry");   // length 6, but snapshot is already frozen

    foreach (string w in snapshot)
    {
      Console.WriteLine(w); // prints "banana" only
    }
  }
}

OrderBy + Take

Yhdistä OrderBy-, Select- ja Take/Skip-operaattorit pieniksi ja helposti luettaviksi putkiksi.

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] nums = new int[] { 5, 1, 4, 2, 3 };

    var firstTwoSortedSquares = nums
      .OrderBy(n => n)   // 1,2,3,4,5
      .Select(n => n * n)
      .Take(2);          // 1,4

    foreach (int x in firstTwoSortedSquares)
    {
      Console.WriteLine(x);
    }
  }
}

Vinkkejä ja huomioitavaa

Vinkkejä:

  • Kyselyt muodostavat suunnitelman. Ne suoritetaan, kun luettelet tai materialisoit tulokset.
  • Materialisoi tulokset ToList-operaattorilla, kun tarvitset vakaan tilannekuvan.
  • Pidä jokainen vaihe pienenä ja nimeä se selkeästi.
  • Vältä kalliiden lähteiden luettelemista uudelleen. Tallenna tarvittaessa lista.

Viivästetyn suorituksen sääntö

Pikatarkistus: Milloin IEnumerable-tyyppisen lähteen LINQ-kysely suoritetaan käytännössä?

Kertaus

Kertaus: Muodosta pieniä IEnumerable<T>-putkia Where-, Select- ja muilla operaattoreilla. Muista, että suoritus on viivästetty, kunnes iteroit sekvenssiä tai kutsut ToList- tai ToArray-operaattoria.

Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”IEnumerable<T>-putket ja viivästetty suoritus” ilmainen?

Kyllä – oppitunnin ”IEnumerable<T>-putket ja viivästetty suoritus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”IEnumerable<T>-putket ja viivästetty suoritus”?

Rakentakaa LINQ-putkia IEnumerable -kokoelmien päälle ja tutustukaa viivästetyn suorituksen sekä ToList- tai ToArray-materialisoinnin eroon. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.

Kuinka kauan ”IEnumerable<T>-putket ja viivästetty suoritus”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. IEnumerable -putket ja viivästetty suoritus
  2. Select, Where, OrderBy ja Take/Skip
  3. Kyselysyntaksi ja menetelmäsöyntaksi
← Takaisin: C# Academy