with-lausekkeet record-tyypeissä
Luokaa muuttumattomista olioista muokattuja kopioita.
with-lausekkeet record-tyypeissä on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. 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ä 4 oppituntia.
with-lauseke
with-lauseke luo tietueesta kopion, jossa joidenkin ominaisuuksien arvoja on muutettu, ja jättää alkuperäisen koskemattomaksi. Se on idiomaattinen tapa "päivittää" muuttumattomia tietueita.
using System;
record Point(int X, int Y);
var a = new Point(1, 2);
var b = a with { Y = 9 };
Console.WriteLine(a + " | " + b); // Point { X = 1, Y = 2 } | Point { X = 1, Y = 9 }Tuhoamaton muutos
Alkuperäistä tietuetta ei koskaan muuteta. with tekee pinnallisen kopion ja kohdistaa luetellut muutokset vain kopioon.
using System;
record User(string Name, int Age);
var original = new User("Ada", 30);
var older = original with { Age = 31 };
Console.WriteLine(original.Age + " " + older.Age); // 30 31Useiden ominaisuuksien muuttaminen
Luettele aaltosulkeiden sisällä useita sijoituksia, jos haluat muuttaa samanaikaisesti useampaa kuin yhtä ominaisuutta.
using System;
record Config(string Env, int Retries, bool Verbose);
var baseCfg = new Config("dev", 3, false);
var prod = baseCfg with { Env = "prod", Verbose = true };
Console.WriteLine(prod.Env + " " + prod.Retries + " " + prod.Verbose); // prod 3 TrueMuuttumattomien ominaisuuksien kopiointi
Ominaisuudet, joita ette mainitse, kopioidaan sellaisinaan lähdetietueesta.
using System;
record Product(string Name, decimal Price, int Stock);
var p = new Product("Book", 12m, 5);
var discounted = p with { Price = 10m };
Console.WriteLine(discounted.Name + " " + discounted.Stock); // Book 5with ja arvovertailu
Koska tietueissa käytetään arvovertailua, kopio, jossa ei muuteta mitään, on yhtä suuri kuin alkuperäinen.
using System;
record Coord(int X, int Y);
var a = new Coord(1, 2);
var b = a with { };
Console.WriteLine(a == b); // True (value equal)
Console.WriteLine(ReferenceEquals(a, b)); // False (different objects)Pintakopion semantiikka
with kopioi viitteet, ei kokonaisia syviä oliograafeja. Sisäkkäinen muutettava olio jaetaan alkuperäisen ja kopion kesken.
using System;
using System.Collections.Generic;
record Cart(List<string> Items);
var a = new Cart(new List<string> { "x" });
var b = a with { };
b.Items.Add("y"); // shared list!
Console.WriteLine(a.Items.Count); // 2with record struct -tyypeissä
Myös record struct -tyypit tukevat with-lauseketta, joka tuottaa muokatun kopion arvotyypistä.
using System;
record struct Size(int W, int H);
var s = new Size(4, 4);
var wide = s with { W = 8 };
Console.WriteLine(wide.W + "x" + wide.H); // 8x4with-lausekkeiden ketjuttaminen
Voitte ketjuttaa with-lausekkeita ja tehdä muutoksia peräkkäin niin, että jokainen vaihe tuottaa uuden tietueen.
using System;
record Point(int X, int Y, int Z);
var p = new Point(0, 0, 0)
with { X = 1 }
with { Y = 2 }
with { Z = 3 };
Console.WriteLine(p); // Point { X = 1, Y = 2, Z = 3 }Päivitykset ilman builder-luokkia
with poistaa builder-luokkien tarpeen: kopioikaa tietue ja muokatkaa vain haluamianne kenttiä.
using System;
record Email(string To, string Subject, string Body);
var draft = new Email("a@b.com", "Hi", "");
var ready = draft with { Body = "Welcome!" };
Console.WriteLine(ready.Body); // Welcome!Mukautettu kopiointilogiikka
Tietueet luovat suojatun kopiorakentajan, jota with käyttää. Voitte määrittää oman kopiorakentajan ja mukauttaa kopioiden muodostamista.
using System;
record Audited(string Name) {
public int Version { get; init; } = 1;
protected Audited(Audited other) {
Name = other.Name;
Version = other.Version + 1; // bump on every copy
}
}
var a = new Audited("x");
var b = a with { };
Console.WriteLine(a.Version + " " + b.Version); // 1 2Yhdistetään kaikki
Tilan siirtymien mallintaminen with-lausekkeilla säilyttää muutokset kestävänä ja auditointiin sopivana historiana.
using System;
record Order(string Id, string Status);
var created = new Order("O1", "Created");
var paid = created with { Status = "Paid" };
var shipped = paid with { Status = "Shipped" };
Console.WriteLine(created.Status + " -> " + paid.Status + " -> " + shipped.Status);Pikatesti
Testatkaa, miten hyvin ymmärrätte with-lausekkeet.
Kertaus
Opitte käyttämään tietueiden with-lausekkeita.
a with { Prop = value }kopioi valitut ominaisuudet ja muuttaa niitä.- Alkuperäistä ei koskaan muuteta, joten toiminto on tuhoamaton.
- Kopio on pintakopio, joten sisäkkäiset muutettavat oliot jaetaan.
- Se toimii tietueissa ja record struct -tyypeissä, ja lausekkeita voi ketjuttaa.
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 ”with-lausekkeet record-tyypeissä” ilmainen?
Kyllä – oppitunnin ”with-lausekkeet record-tyypeissä” 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ä 4 oppituntia.
Mitä opin oppitunnilla ”with-lausekkeet record-tyypeissä”?
Luokaa muuttumattomista olioista muokattuja kopioita. 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 4/4.
Kuinka kauan ”with-lausekkeet record-tyypeissä”-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
- init-vain-asettajat
- required-määrite
- Muuttumattomien olioiden mallit
- with-lausekkeet record-tyypeissä