Random osztály és a kollekciók
.NET 8-tól kezdve a Random osztály két hasznos metódussal bÅ‘vült. Random.GetItemssegÃtségével egy tömbbÅ‘l véletlenszerűen tudunk elemeket kiválasztani. A tömbbel visszatérÅ‘ változat esetén lehetÅ‘ségünk van meghatározni, hogy hány darab elemmel térjen vissza. A void visszatérésű változatokban a második paraméter a cél span-t határozza meg, amibe az elemek kiválasztása történik.
public T[] GetItems<T> (ReadOnlySpan<T> choices, int length);
public void GetItems<T> (ReadOnlySpan<T> choices, Span<T> destination);
public void GetItems<T> (ReadOnlySpan<T> choices, Span<T> destination);
A másik bevezetett metódus a Shuffle, amivel egy tömb elemeit tudjuk véletlenszerűen összekeverni:
public void Shuffle<T> (Span<T> values);
public void Shuffle<T> (T[] values);
Experimental attribútum
Az Experimental attribútum a System.Diagnostics.CodeAnalysis névtérben található és azért került bevezetésre, hogy egy osztálykönyvtár készÃtésekor lehetÅ‘ségünk legyen megjelölni a kÃsérleti funkciókat, amelyek működése változhat. Ha egy ilyen attribútummal megjelölt tÃpust vagy metódust használunk a kódunkban, akkor a fordÃtó fordÃtási hibát generál.
Az Experimental attribútum konstruktorában meg kell adnunk egy diagnosztikai azonosÃtót szövegként. Ez azért lesz fontos, mert a fordÃtási hiba ennek az id-nek a megadásával kapcsolható ki, illetve az UrlFormat tulajdonság megadásával egy webcÃmet is rendelhetünk a funkció dokumentációjához:
public static class ExperimentalTest
{
[Experimental("TestFoo", UrlFormat = "http://dokumentacio/hogymiert")]
public static void Test()
{
//kód
}
}
A fenti kódban a TestFoo id került hozzárendelésre a funkcióhoz. Ennek ismeretében ha azt szeretnénk, hogy a Test() metódus hÃvása ne generáljon fordÃtási hibát, akkor ilyen módon kell meghÃvnunk:
#pragma warning disable TestFoo
ExperimentalTest.Test();
#pragma warning restore TestFoo
A #pragma warning disable utasÃtás egy megadott azonosÃtójú fordÃtási figyelmeztetést kikapcsol, a #pragma warning restore pedig ismételten engedélyezi.
UnreachableException
Az UnreachableException a System.Diagnostics névtérben található és olyan kivétel szituációk jelzésére szolgál, amelyek a szoftver jelenlegi állapotában nem szabadna, hogy megtörténjenek. Nézzünk egy példát. Tételezzük fel, hogy van egy enum tÃpusunk pár definiált értékkel:
public enum Teszt
{
Egyik,
Masik,
}
Tételezzük fel azt is, hogy ezen értékek egy döntést befolyásolnak a kódunkban, amit mondjuk egy switch-case segÃtségével valósÃtunk meg. Ebben az esetben az enum értékeit lekezeljük egy-egy case ággal, a default ágban meg mondjuk dobunk egy kivételt, hogy nem várt értéket kaptunk. Erre használhatnánk például az InvalidOperationException osztályt is, de valóban nem várt állapotról van szó?
Teszt t = Teszt.Egyik;
switch (t)
{
case Teszt.Egyik:
//kód
break;
case Teszt.Masik:
//kód
break;
default:
throw new UnreachableException("Unknown value");
}
Természetesen nem, mivel a kód megÃrásakor nem is létezik több lehetséges állapot, amit az enum tÃpusunk felvehetne. Ilyenkor dobhatunk egy UnreachableException kivételt, amivel jelezzük, hogy ennek az állapotnak egyáltalán nem szabadott volna bekövetkeznie.
Ez azért fontos és hasznos, mert a kód késÅ‘bbi bÅ‘vÃtése során egyértelműen érthetÅ‘ lesz, hogy mire gondolt az eredeti szerzÅ‘.