Diskuze: C# - Více outputů z metody

C# .NET .NET (C# a Visual Basic) C# - Více outputů z metody American English version English version

Avatar
Elisse
Člen
Avatar
Elisse:

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. května 6:27
 
Odpovědět 28. května 6:27
Avatar
niderle.l
Člen
Avatar
Odpovídá na Elisse
niderle.l:

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  -2 28. května 8:04
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Elisse
Lukas C#:

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  +3 28. května 9:05
Avatar
Xan95
Člen
Avatar
Xan95:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 28. května 12:09
Avatar
Odpovídá na Elisse
Jakub Šárník:

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. května 12:12
Avatar
krepsy3
Redaktor
Avatar
krepsy3:

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  -1 28. května 13:37
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na Elisse
Ondřej Štorc:

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

Nahoru Odpovědět  +1 28. května 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
Jakub Šárník:

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. května 15:19
Avatar
Elisse
Člen
Avatar
Elisse:

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  +1 28. května 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.