Try-catch v metode s navratovou hodnotou – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Try-catch v metode s navratovou hodnotou – .NET – Fórum – Programujte.comTry-catch v metode s navratovou hodnotou – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
yterbium0
Stálý člen
15. 10. 2010   #1
-
0
-

Zdravím,

mám menší problém, mám napísanú metodu, ktorá mi vracia string, aby ho vrátila mám v bloku try, v bloku catch mám jednoduchý objekt Logger,ktorý mi zapisuje chybu do .txt súboru.

Keď sa pokúsim skompilovať, vyhodí mi chybu typu , že "nie všetky časti kodu vracajú hodnotu string"...

Ošetril som to tým, že som do catch po použití Logger objektu napísal "throw", ale to presne nechcem.
Chcel by som vlastne ak nejaká výnimka sa vybudí, tak aby napísalo messageBox aby mi poslal ten a ten súbor a vyplo aplikáciu.

Mohol by mi niekto aspoň cca ukázať ako na to? Resp. ako spraviť to, aby som tam nedal do catch bloku "throw"

Vopred díky

Nahlásit jako SPAM
IP: 158.195.201.–
Reklama
Reklama
15. 10. 2010   #2
-
0
-

Zdravím,

vzhledem k tomu, že si neposlal ukázku oné metody (proč?), tak pouze teoreticky. Metoda s návratovou hodnotou musí "vždy" něco vracet. Pokud v té metodě používáš nějakou formu větvení (podmínky, try-catch, ..), musíš v každé z této větve něco vrátit (nebo provést nějaké operace a vrátit výslednou hodnotu na konci). Když přidáš ten kód, napíšu víc.

Nahlásit jako SPAM
IP: 89.203.157.–
Dušan Janošík | web: djanosik.cz, @djanosik
Quiark0
Věrný člen
15. 10. 2010   #3
-
0
-

No hlavně se musíš rozhodnout, co to má dělat, když dojde k výjimce. Volajícímu tvé metody jsi slíbil, že dostane string, žejo. Takže buď rovnou v tom bloku catch aplikaci ukončit, nebo vrátit nějakou hodnotu (jenže to pak volající nepozná, že něco je špatně) nebo výjimku chytat někde jinde.

Nahlásit jako SPAM
IP: 90.178.173.–
15. 10. 2010   #4
-
0
-

To Quiark : Jde o to, jestli volající v daném případě potřebuje vědět, že je něco špatně.

Nahlásit jako SPAM
IP: 89.203.157.–
Dušan Janošík | web: djanosik.cz, @djanosik
yterbium0
Stálý člen
15. 10. 2010   #5
-
0
-

pardon páni, bol som "ponáhľaný" na prednášku, zabudol som na kód, dám len podstatnú časť:

public List<Searchresult> SearchResultByName(string pName)

{
link = "";
XML = "";
link = LinkFormatter.SearchByName(pName);
List<Searchresult> searchReslt = new List<Searchresult>();
try
{
XML = myWClient.DownloadString(link); //toto je webclient na downlaod stringu
searchReslt = myXMLExtracter.SearchResultExtract(XML); //spraucje stiahnuté xml a vyextrahuje z neho čo potrebujem
return searchReslt;
}
catch (Exception ex)
{
log.ErrorWrite(ex, folderOrg.LogFolder()); //ulozi mi exception do .txt súboru, toto mi funguje bez problemov
throw;
//A tu miesto toho aby som mal "throw", by som chcel vypnúť aplikáciu a zobraziť správu aby mi poslal mailom súbor,
//ktorý je vytvorený tým log.ErrorWrite
}

}

Nahlásit jako SPAM
IP: 188.167.3.–
VaKvas0
Newbie
16. 10. 2010   #6
-
0
-

To yterbium : Ja bych jen definoval v bloku try hodnotu searchReslt a retun bych dal az na konci za odchytem vyjimky... tedy

try {

}
catch {

// vytvorit soubor a zaslat
}

return searchReslt;

Nahlásit jako SPAM
IP: 88.103.3.–
yterbium0
Stálý člen
16. 10. 2010   #7
-
0
-

a je niečo také "principiálne" správne?

či to neruší nejaké princípy OOP, lebo keď už programujem tak aspoň správne sa snažiť...

Čiže toto je vo všeobecnosti odporúčaný postup?

Nahlásit jako SPAM
IP: 188.167.3.–
KIIV+42
God of flame
16. 10. 2010   #8
-
0
-

to co resis je principialne uplne mimo OOP ..
princip je takovy, ze kdyz tvrdis ze ma neco vratit string, tak ho taky mas vratit (ze kteryhokoliv rozvetveni...) a to tam ted proste nedelas.. mas cast, kde to skonci, a neexistuje zadna definovana hodnota co to vrati.. (coz si tu ohlida kompilator ) ale v nekterych jinych jazycich to uz muze udelat neskutecnou paseku

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
yterbium0
Stálý člen
17. 10. 2010   #9
-
0
-

no tak to teda spravím tak, aby to vždy vracalo.

Díkes za názory

Nahlásit jako SPAM
IP: 95.102.76.–
LiborBes
~ Anonymní uživatel
47 příspěvků
28. 10. 2010   #10
-
0
-

yterbium napsal:
a je niečo také "principiálne" správne?

či to neruší nejaké princípy OOP, lebo keď už programujem tak aspoň správne sa snažiť...

Čiže toto je vo všeobecnosti odporúčaný postup?



Tak s tymto absolutne nesulhasim. Ak je program riadeny vynimkami, tak nezalezi vobec na tom, ci tam nieco vratis alebo nie (najde sa to aj v kode od M$):

try
{
IntSecurity.AllWindows.Demand();
}
catch (SecurityException)
{
this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestricted] = true;
}
catch
{
this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestricted] = true; // To be on the safe side
this.dataGridViewState1[DATAGRIDVIEWSTATE1_isRestrictedChecked] = true;
throw;
}

Nepouzivat vynimky moze kod znacne zneprehladnit, pretoze sa budu musiet zavadzat pri kazdej navratovej hodnote kody, ktore urcia, ze vysledok vlastne nie je spravny. Takymto pohladom som sa uz stretol ked som refaktoroval jednu serverovu aplikaciu ktora sa spravala "divne" a nebola takmer vobec rozsiritelna (mala len 200.000 riadkov) - cely problem bol v nepochopeni a nepouzivani vynimiek. Po refaktoringu (trval 2 roky => znacne drahy) sa aplikacia sprava "ocakavatelne" a je rozsiritelna.

Diskutoval by som skor o tom, ci raisovat vynimku v konstruktore alebo destruktore (leaky), ale v metode nevidim absolutne ziaden problem.

Nahlásit jako SPAM
IP: 88.212.33.–
LiborBes
~ Anonymní uživatel
47 příspěvků
28. 10. 2010   #11
-
0
-

To LiborBes : citoval som KIIV - sry

Nahlásit jako SPAM
IP: 88.212.33.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 46 hostů

Podobná vlákna

[C#] Pristup k metode — založil Roxtoon

Zavolanie metody v inej metode — založil marioff

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý