Patternuri pentru Tuple-uri
Patternurile pentru tuple-uri permit compararea valorilor din tuple-uri. De exemplu, putem transmite un tuple în construcția switch care conține denumirea limbii și momentul zilei, iar în funcție de datele transmise, să returnăm un mesaj specific:
string GetWelcome(string lang, string daytime) => (lang, daytime) switch
{
("english", "morning") => "Good morning",
("english", "evening") => "Good evening",
("german", "morning") => "Guten Morgen",
("german", "evening") => "Guten Abend",
_ => "Bună"
};
Aici, în metodă sunt transmise două valori, din care se creează un tuple (se poate transmite direct tuple-ul în metodă). În construcția switch, cu ajutorul parantezelor rotunde, se definesc valorile care trebuie să corespundă elementelor tuple-ului.
De exemplu, expresia ("english", "morning") => "Good morning" va fi executată dacă simultan lang = "english" și datetime = "morning".
Aplicare:
string message = GetWelcome("english", "evening");
Console.WriteLine(message); // Good evening
message = GetWelcome("french", "morning");
Console.WriteLine(message); // Bună
Nu este necesar să comparăm toate valorile din tuple, putem folosi doar anumite elemente ale tuple-ului. În cazul în care nu dorim să utilizăm un element din tuple, în locul său punem un underscore:
string GetWelcome(string lang, string daytime, string status) => (lang, daytime, status) switch
{
("english", "morning", _) => "Good morning",
("english", "evening", _) => "Good evening",
("german", "morning", _) => "Guten Morgen",
("german", "evening", _) => "Guten Abend",
(_, _, "admin") => "Hello, Admin",
_ => "Bună"
};
Acum, tuple-ul conține trei elemente. Dar primele patru expresii nu folosesc ultimul element al tuple-ului, presupunem că acesta nu este important, de aceea în locul său punem un underscore ("english", "morning", _).
În penultimul exemplu, din contra, primele două elemente nu sunt importante, iar al treilea element este important: (_, _, "admin") =>.
În orice caz, trebuie să specificăm valori concrete sau underscore pentru toate elementele tuple-ului.
string message = GetWelcome("english", "evening", "user");
Console.WriteLine(message); // Good evening
message = GetWelcome("french", "morning", "admin");
Console.WriteLine(message); // Hello, Admin