Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tip
Ez a cikk az Alapismeretek szakasz része azon fejlesztők számára, akik már legalább egy programozási nyelvet ismernek, és c#-t tanulnak. Ha most ismerkedik a mintákkal, kezdje a mintailesztés áttekintésével. A teljes szintaxisért lásd az elvetési minta referenciáját.
Az alsóvonás token (_) azt jelzi, hogy nincs szükség egy értékre. Pontos jelentése attól függ, hogy hol jelenik meg:
| Context |
_ jelentése |
|---|---|
| switch-kifejezés ága vagy beágyazott minta | Az eredmény rögzítése nélkül egyező elvetési minta |
Dekonstrukció vagy out érv |
Egy előállított értéket figyelmen kívül hagyó elvetés |
Egy hozzárendelés, például _ = expression |
Elvetési hozzárendelés, amely kiértékeli a kifejezést, és figyelmen kívül hagyja annak eredményét |
Két vagy több lambda-paraméter neve _ |
Olyan paraméterek elvetése , amelyek bemeneteit nem használják |
var _ egy mintában |
Minta var elvetési megjelöléssel |
Ezek az űrlapok közösek a helyesírásban és a szándékban, de nem cserélhetők fel.
Mintaegyezés a switch
Az alábbi példában a statusCode egy int. Minden kapcsolókar létrehoz egy string üzenetet, amelyet a program a konzolra ír. Az utolsó _ a 404 és 200 kivételével minden állapotkódot kezel:
static void ShowStatus()
{
int statusCode = 503;
string message = statusCode switch
{
200 => "Ready",
404 => "Not found",
_ => "Another status"
};
Console.WriteLine(message);
}
A program elvetési mintát alkalmaz egy bemeneti kifejezésre. A C# kiértékeli a kifejezést, és a _ a kiértékelt értékre illeszkedik anélkül, hogy rögzítené azt. Válassza a(z) _ elemet a switch-kifejezés utolsó ágaként, ha minden korábban nem kezelt értéknek ugyanazt a tartalékmegoldást kell használnia. Tedd utoljára, mert megfelel mindennek, beleértve a null.
A var _ alak egy var minta elvetési jelöléssel. Minden kiértékelt értéknek megfelel, de nem vezet be olvasható változót. A rövidebb _ elvetési mintát részesítse előnyben az összes kapcsoló esetében. A mintákról var és a megjelölésekről további információt a Deklaráció, az állandó és var a minták című témakörben talál.
Szétszerelési nyilatkozatok
GetForecast egy négy összetevőből álló tuple-t ad vissza: egy string várost és három int értéket a magas hőmérséklethez, az alacsony hőmérséklethez, valamint az eső valószínűségéhez. A dekonstruálási deklaráció megmarad city , és high mivel a program megjeleníti őket. Alacsony hőmérsékletre és esőre használható _ , mert a fel nem használt összetevők elnevezése azt jelenti, hogy a kódnak szüksége van rájuk:
static void ShowForecast()
{
var (city, high, _, _) = GetForecast();
Console.WriteLine($"{city}: high {high}°C");
static (string City, int High, int Low, int RainChance) GetForecast() =>
("Portland", 18, 9, 40);
}
Ugyanez az elvetési szintaxis akkor működik, ha egy objektum metódusa Deconstruct több értéket hoz létre. Ezekről a formákról lásd a következőt: Tuple-ök és más típusok dekonstruálása.
Metódusok meghívása paraméterekkel out
Tegyük fel, hogy egy beviteli mező csak akkor fogadja el a szöveget, ha egész számot jelöl. A TryParse(String, Int32) metódus egy bool olyan értéket ad vissza, amely azt jelzi, hogy az elemzés sikeres volt-e. Emellett az elemzett out értéket a(z) int paraméterén keresztül is előállítja. A következő kódnak csak a logikai eredményre van szüksége a bemenet elfogadásához vagy elutasításához:
static void CheckInput()
{
string text = "42";
if (IsWholeNumber(text))
{
Console.WriteLine($"Accepted: {text}");
}
else
{
Console.WriteLine("Enter a whole number.");
}
static bool IsWholeNumber(string text) => int.TryParse(text, out _);
}
Akkor használja out _ , ha csak a művelet sikeressége számít. Az elvetés egyértelművé teszi, hogy az elemzési számra nincs szükség. Ha a későbbi kódnak szüksége van a számra, adjon nevet az out argumentumnak, például out int number, és őrizze meg helyette ezt az értéket.
Egy elvetett hozzárendelés kiértékel egy kifejezést, _ = expressionés szándékosan figyelmen kívül hagyja annak eredményét. Ez olykor hasznos, ha a kifejezés önmagában nem érvényes utasítás.
Important
Ne használja a _ = Task.Run(...) vagy _ = SomeAsyncMethod() elemet egy feladat elvetésére az alkalmazás kódjában. Várja meg a feladatot, hogy a befejezése és a kivételek a hívási folyamatban maradjanak. Az elvetési hozzárendelések nem teszik biztonságossá a feladatokat, nem figyelik meg a kivételt, és nem hoznak létre támogatott tűz- és felejtési műveletet.
Nem használt lambdaparaméterek megjelölése
Egy EventHandler egy object? küldőt és egy EventArgs értéket kap. A következő kezelőnek egyik paraméter sem szükséges; csak a konzolra ír "Timer tick" . Ha mindkét paraméter neve _, azzal láthatóvá válik, hogy nincsenek használva, anélkül, hogy olyan neveket kellene kitalálni, amelyeket a függvénytörzs soha nem használ:
static void ShowLambdaDiscards()
{
EventHandler handler = (_, _) => Console.WriteLine("Timer tick");
handler(null, EventArgs.Empty);
}
Adja meg az elvetett paramétereket, ha a delegált aláírás olyan bemeneteket igényel, amelyeket a lambda törzse nem használ. Ha egy lambda csak egy paraméterrel _rendelkezik, _ a visszamenőleges kompatibilitás szokásos paraméterneve marad.
Ne használja a(z) _ elemet azonosítóként
_ lehet egy szokásos azonosító olyan környezetekben, ahol a C# nem ismeri fel a elvetéseket. A hatókörben lévő, _ nevű változó kaphat olyan értékadást, amely eldobási értékadásnak tűnik. Mintakontextusban egy elérhető, _ nevű konstans vagy típus is megváltoztathatja a(z) _ értelmezését. Ne deklaráljon saját, _ nevű változókat, konstansokat vagy típusokat; az eldobási szándék jelzésére használja a(z) _ elemet.