Krotki
VarrComodoo
Zastosowanie
Czasami w kodzie występuje parę zmiennych ściśle ze sobą powiązanych, nad którymi potrzebujemy pracować jednocześnie (traktować je jako grupę). Przykład:
enum Plec
{
Kobieta,
Mezczyzna
}
static void Main(string[] args)
{
string Imie = "Jan";
string Nazwisko = "Kowalski";
int RokUrodzenia = 1939;
Plec plec = Plec.Mezczyzna;
Console.WriteLine($"Dane osoby: \r\n" +
$"Imie: {Imie}\r\n" +
$"Nazwisko: {Nazwisko}\r\n" +
$"Rok urodzenia: {RokUrodzenia}\r\n" +
$"Plec: {plec.ToString()}\r\n");
Console.ReadLine();
}
Załóżmy że potrzebujemy pracować nad tymi danymi w ściśle związany sposób, np. przesyłać komplet tych danych do metody, spójnie obrabiać je w metodzie, np. edytować je naraz, i zwracać wynik wszystkich 4 zaktualizowanych danych:
Obecnie jest parę sposobów na zrobienie tego:
• Jeżeli wszystkie powiązane zmienne są tego samego typu to możemy zastosować jakąś tablice, listę itp.
• Jeżeli wszystkie powiązane zmienne są różnych typów możemy je zgrupować w klasie i odwoływać się do nich przez obiekt typu tej klasy
• Druga opcja to zamiast w klasie grupować je w strukturze
• Można je wszystkie przekazywać do metod z parametrem ‘ref’ lub ‘out’ i przez to zwracać większą liczbę zmiennych z jednej metody
• Dużo mniej poprawna /może lepiej pasuje określenie „patologiczna”/ możliwość to połączyć je w jeden łańcuch string i potem „wyłuskiwać” je z łańcucha, konwertować na właściwe typy, obrabiać i znów budować łańcuch żeby jako jeden string zwracać go z metody – to raczej w życiu niedopuszczalna możliwość ale na upartego da się.
##Sposób definiowania i korzystania
Od wersji C# 7.0 można te powiązane dane zgrupować w krótki, jako jedną krotke przekazywać do metody i jako jedna krotkę zwracać z metody:
Przykłady jak można korzystać z krotek /tworzyć je i z nich korzystać/:
-
Przyklad 1
przypisywanie krotki do osobno deklarowanych zmiennych
(string Imie, string Nazwisko, int RokUrodzenia, Plec plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {Imie}\r\n" +
$"Nazwisko: {Nazwisko}\r\n" +
$"Rok urodzenia: {RokUrodzenia}\r\n" +
$"Plec: {plec.ToString()}\r\n");
-
Przyklad 2
przypisywanie krotki do wczesniej, osobno zadeklarowanych zmiennych
string Imie = "Jan";
string Nazwisko = "Kowalski";
int RokUrodzenia = 1939;
Plec plec = Plec.Mezczyzna;
(Imie, Nazwisko, RokUrodzenia, plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {Imie}\r\n" +
$"Nazwisko: {Nazwisko}\r\n" +
$"Rok urodzenia: {RokUrodzenia}\r\n" +
$"Plec: {plec.ToString()}\r\n");
-
Przyklad 3:
przypisywanie elementów krotki do deklarowanych zmiennych z niejawnym typem
(var Imie, var Nazwisko, var RokUrodzenia, var plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {Imie}\r\n" +
$"Nazwisko: {Nazwisko}\r\n" +
$"Rok urodzenia: {RokUrodzenia}\r\n" +
$"Plec: {plec.ToString()}\r\n");
-
Przyklad 4
przypisywanie krotki do osobno deklarowanych zmiennych
z niejawnie okreslonym typem wszystkich zmiennych
var (Imie, Nazwisko, RokUrodzenia, plec) = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {Imie}\r\n" +
$"Nazwisko: {Nazwisko}\r\n" +
$"Rok urodzenia: {RokUrodzenia}\r\n" +
$"Plec: {plec.ToString()}\r\n");
-
Przyklad 5:
deklarowanie nazwanej krotki, przypisanie jej wartosci i dostep do elementow na podstawie nazw
(string Imie, string Nazwisko, int RokUrodzenia, Plec plec) daneOsobnika = ("Jan", "Kowalski", 1939, Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {daneOsobnika.Imie}\r\n" +
$"Nazwisko: {daneOsobnika.Nazwisko}\r\n" +
$"Rok urodzenia: {daneOsobnika.RokUrodzenia}\r\n" +
$"Plec: {daneOsobnika.plec.ToString()}\r\n");
-
Przyklad 6
przypisywanie krotki do zmiennej o niejawnym typie
dostep do elementow krotki na podstawie nazw
var daneOsobnika =
(Imie: "Jan", Nazwisko: "Kowalski", RokUrodzenia: 1939, plec: Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {daneOsobnika.Imie}\r\n" +
$"Nazwisko: {daneOsobnika.Nazwisko}\r\n" +
$"Rok urodzenia: {daneOsobnika.RokUrodzenia}\r\n" +
$"Plec: {daneOsobnika.plec.ToString()}\r\n");
-
Przyklad 7
przypisanie krotki bez nazw do jednej zmiennej o niejawnym typie,
dostep do elementów krotki na podstawie numerowanych wlasciwosci //podpowiada IntelliSense
var daneOsobnika =
("Jan", "Kowalski", 1939, Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {daneOsobnika.Item1}\r\n" +
$"Nazwisko: {daneOsobnika.Item2}\r\n" +
$"Rok urodzenia: {daneOsobnika.Item3}\r\n" +
$"Plec: {daneOsobnika.Item4}\r\n");
-
Przyklad 8
przypisanie krotki z nazwami do jednej zmiennej o niejawnym typie,
dostep do elementów krotki na podstawie numerowanych wlasciwosci //podpowiada IntelliSense
var daneOsobnika =
(Imie: "Jan", Nazwisko: "Kowalski", RokUrodzenia: 1939, plec: Plec.Mezczyzna);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {daneOsobnika.Item1}\r\n" +
$"Nazwisko: {daneOsobnika.Item2}\r\n" +
$"Rok urodzenia: {daneOsobnika.Item3}\r\n" +
$"Plec: {daneOsobnika.Item4}\r\n");
-
Przyklad 9
nazwy krotek wywnioskowane na podstawie nazw zmiennych
string Imie = "Jan";
string Nazwisko = "Kowalski";
int RokUrodzenia = 1939;
Plec plec = Plec.Mezczyzna;
var daneOsobnika = (Imie, Nazwisko, RokUrodzenia, plec);
Console.WriteLine(
$"Dane osoby: \r\n" +
$"Imie: {daneOsobnika.Imie}\r\n" +
$"Nazwisko: {daneOsobnika.Nazwisko}\r\n" +
$"Rok urodzenia: {daneOsobnika.RokUrodzenia}\r\n" +
$"Plec: {daneOsobnika.plec.ToString()}\r\n");