NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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.

Aktivity
Avatar
Erik Šťastný:28.5.2016 6:27

Zdravím,
prosím Vás jak nějak elegantně řešit když máte metodu, u které je její výsledek více než jedna hodnota. Představte si nějakou dlouhou složitou metodu jejiz výsledkem jsou třeba 4x int 2x string. Dá se to řešit nějak "hezky" a jinak než prostě 6x zavolat get pro tydle výsledky ve smyslu

Metoda.GetprvniInt
Metoda.GetdruhyInt
...
Editováno 28.5.2016 6:27
 
Odpovědět
28.5.2016 6:27
Avatar
Odpovídá na Erik Šťastný
Ladislav Niderle:28.5.2016 8:04

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.

 
Nahoru Odpovědět
28.5.2016 8:04
Avatar
Odpovídá na Erik Šťastný
Neaktivní uživatel:28.5.2016 9:05

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.

Nahoru Odpovědět
28.5.2016 9:05
Neaktivní uživatelský účet
Avatar
Štěpán Wünsch:28.5.2016 12:09

můžeš použít klíčové slovo out https://msdn.microsoft.com/…3c3bfhx.aspx
nebo vracet třídu či strukturu

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.5.2016 12:09
Avatar
Odpovídá na Erik Šťastný
Neaktivní uživatel:28.5.2016 12:12

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 :-)

Nahoru Odpovědět
28.5.2016 12:12
Neaktivní uživatelský účet
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:28.5.2016 13:37

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.

Nahoru Odpovědět
28.5.2016 13:37
Programátor je stroj k převodu kávy na kód.
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Erik Šťastný
Ondřej Štorc:28.5.2016 13:51

Koukni se na Tuple<T1,...,Tn>

Nahoru Odpovědět
28.5.2016 13:51
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na Ondřej Štorc
Neaktivní uživatel:28.5.2016 15:19

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 :)

Nahoru Odpovědět
28.5.2016 15:19
Neaktivní uživatelský účet
Avatar
Erik Šťastný:28.5.2016 17:36

Díky všem za reakce! nejvíce se mi asi zamlouvá vracet třídu :) Mě vůbec nenapadlo, díky moc! :)

 
Nahoru Odpovědět
28.5.2016 17:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.