Diskuze: C# - Více outputů z metody
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Osobně to řeším tak, že prostě pokud bude mít metoda více návratových hodnota, tak je postupně naskládám za sebe přes nějaký oddělovač a následně při návratu si je rozparsuju. To se dá dělat, když víš přesný počet hodnot. Ale neříkám, že je to nejlepší hodnota.
Pokud jsou to třeba dva Integery, tak bych prostě vrátil dvouprvkové pole s těmito Inty. Ale když je těch výsledků víc jak 5, tak bych si vytvořil strukturu (s fieldy na výsledky), v metodě, která má ty výsledky vracet, ji inicializoval a vrátil.
můžeš použít klíčové slovo out https://msdn.microsoft.com/…3c3bfhx.aspx
nebo vracet třídu či strukturu
Dá se to řešit různými způsoby. Pokud tvoří ty prvky nějaký logický celek, tak je vhodné na ně vytvořit nějakou třidu/strukturu. Pokud se například jeden z returnů využívá víc (např. přímo v podmínce), můžeš použít out parametry (jako to dělá např. metoda TryParse). V příští verzi C# naštěstí budeš moct vracet víc hodnot přes n-tice
Mě přijde, že pokud je to int a string, je nejlepší použít jako návratový typ string[], popř. List<string> = new List<>(); pokud nevíš počet prvků. V generující metodě inty přetypuješ na stringy a při jejich použítí pak použiješ
List <string> navracene = Vygenerovat(); //Vygenerovat() je ta metoda co vrací více čísel či stringů
List<int> cisla = new List<>();
List<string> texty = new List<>();
foreach (string s in navracene)
{
int i;
if (int.TryParse(s, out i)) cisla.Add(i);
else texty.Add(s)
}
Čímž si prvky roztřídíš dle datového typu do listů. Z listů si jepak klidně můžeš přenést do pole, pokud se ti s polem pracuje lépe.
Tuple<T...> nedoporučuji, nepracuje se z ní zrovna nejlépe (a pokud vím tak je v C# hlavně kvůli kompatibilitě s F#). Opravdové n-tice budou v jazyku až ve verzi C# 7
Díky všem za reakce! nejvíce se mi asi zamlouvá vracet třídu Mě vůbec nenapadlo, díky moc!
Zobrazeno 10 zpráv z 10.