Forum » Programiranje » [C#] Izhod iz funkcije
[C#] Izhod iz funkcije
FXMagic ::
Zanima me, kako predčasno izstopit iz funkcije, ki vrača vrednost (v mojem primeru DataSet). Torej jaz imam to funcijo:
To v primeru, da je funkcija tipa void dela, v mojem primeru, pa morem nekaj vrnit. Kako torej naredit, da se v primeru izjeme, prekine izvajanje funkcije?
public static DataSet MyFunction() { try { //neka koda pač } catch (Exception ex) { //če ujame izjemo...izhod iz funkcije return; //error } }
To v primeru, da je funkcija tipa void dela, v mojem primeru, pa morem nekaj vrnit. Kako torej naredit, da se v primeru izjeme, prekine izvajanje funkcije?
- spremenilo: FXMagic ()
snow ::
Zdej maš dve možnosti:
V tvojo strukturo zapakiraš še en flag, ki pove če je bilo vse ok, ali pa strukturo spreminjaš prek pointerja in vračaš int (error kodo).
V upanju da je to dvoje možno v C#, v C++ se lahko.
V tvojo strukturo zapakiraš še en flag, ki pove če je bilo vse ok, ali pa strukturo spreminjaš prek pointerja in vračaš int (error kodo).
V upanju da je to dvoje možno v C#, v C++ se lahko.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Microsoft ::
Ma jst bi tko naredil, da recimo v exception naredis tole:
DataSet ds = null;
return ds;
In potem tam, ko beres ta dataset, se vprasas, ce je null. Ce je, potem ves, da je prislo do errorja.
by Miha
DataSet ds = null;
return ds;
In potem tam, ko beres ta dataset, se vprasas, ce je null. Ce je, potem ves, da je prislo do errorja.
by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr
kopernik ::
Imaš več možnosti (sklepam, da je podobno kot pri Javi) :
1. napake sploh ne ujameš, temveč jo delegiraš naprej (s throws besedico ?) in naj se klicatelj ubada, kaj narediti ob izjemnih situacijah (varianta tega primera je, da napako ujameš in nato vržeš neko lastno definirano napako)
2. napako ujameš in vrneš nedefinirano vrednost (return null;)
3. vračaš nek objekt, ki vsebuje tvoj dataset + nek flag (kot je omenil snow) in če pride do izjeme, ustrezno nastaviš flag
1. napake sploh ne ujameš, temveč jo delegiraš naprej (s throws besedico ?) in naj se klicatelj ubada, kaj narediti ob izjemnih situacijah (varianta tega primera je, da napako ujameš in nato vržeš neko lastno definirano napako)
2. napako ujameš in vrneš nedefinirano vrednost (return null;)
3. vračaš nek objekt, ki vsebuje tvoj dataset + nek flag (kot je omenil snow) in če pride do izjeme, ustrezno nastaviš flag
Zgodovina sprememb…
- spremenil: kopernik ()
Microsoft ::
Ono s throw mislim, da gre recimo takloe:
throw new Exception("EX_DataSet");
by Miha
throw new Exception("EX_DataSet");
by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr
OwcA ::
Precej boljše je naprej podati izjemo, ker null kar kliče po kakšnem zahrbtnem hrošču, ko kdaj zanjo pozabiš preveriti. Poleg tega veliko takšnih prverjanj precej napihne kodo.
Otroška radovednost - gonilo napredka.
CWIZO ::
Eedini pravi nacin je da klicatelju vrzes exception.
Razni return null so grdo in slabo programiranje, ki naj bi se ga v OOPju izogibali!
Sploh pa tisto s strukturo, dej ne bluzite prosim no.
Razni return null so grdo in slabo programiranje, ki naj bi se ga v OOPju izogibali!
Sploh pa tisto s strukturo, dej ne bluzite prosim no.
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
snow ::
Mozillin portability guide guide pravi ravno obratno: Ne exceptionov.
Ampak tu gre verjetno za hardcore portabilnost?
Ampak tu gre verjetno za hardcore portabilnost?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Zgodovina sprememb…
- spremenilo: snow ()
CWIZO ::
Nevem zakaj nebi uporabljal exceptionov.
Govorimo o .NETu in ne o kakem C++ u!!!
Govorimo o .NETu in ne o kakem C++ u!!!
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
kopernik ::
CWIZO, preden te doleti kap, naj razložim, da sem mu samo naštel nekatere možnosti, ki so povsem legalne in od situacije do situacije ustrezne/neustrezne. Čeprav v tem konkretnem primeru bi tudi jaz kar delegiral napako klicatelju metode ...
CWIZO ::
hehe, kap me pa upam se ne bo pr teh letih no
Anways: ostali nacini so tut kdaj recmo lahko qul. Edini un s strukturo. To je pa res ena najvecjih bedarij kar sem jih kdaj slisal.
Anways: ostali nacini so tut kdaj recmo lahko qul. Edini un s strukturo. To je pa res ena najvecjih bedarij kar sem jih kdaj slisal.
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
MaCoFaCo ::
Mogoče se nekoliko pozna pri hitrosti izvajanja: .Net exception performance test
Zaželjeno je recimo, da se čim več stvari preverja z if-i in na ta način preprečimo nepotrebne exceptione. Npr. preden gremo brati datoteko, preverimo če dejansko obstaja, itd.
Zaželjeno je recimo, da se čim več stvari preverja z if-i in na ta način preprečimo nepotrebne exceptione. Npr. preden gremo brati datoteko, preverimo če dejansko obstaja, itd.
MaCoFaCo ::
Pakiranje exceptiona v strukturo je lahko tudi kul. En zelo dober primer za to je recimo pri večnivojski arhitekturi sistema. Npr. imaš klienta na enem računalniku, ta pa kliče business logic funkcije na strežniku, torej fizično drugem računalniku. Če pride na strežniku do exceptiona v neki funkciji, moraš to klientu nekako posredovati. En način da to narediš je, da zapakiraš sporočilo exceptiona v neko strukturo, ki se potem posreduje klientu.
kopernik ::
CWIZO,
tudi tisto s strukturo lahko pride prav. Npr. obstajalo je določeno obdobje, ko standard za web service ni bil dorečen kar se tiče napak/izjem (predvsem zaradi nekaterih jezikov, ki tega mehanizma ne poznajo) in zato se je bilo dobro izogibati SoapFault-om, ker je npr. prišlo do razhajanj pri obravnavi le-teh med .NET-om in Javo (sedaj so zadeve že bolj urejene). No, takrat je bila uporaba flagov edina pametna rešitev in ne vidim, zakaj ne bi flagov in drugi podatkov pač zapakiral v kako strukturo, ki se vrača kot rezultat. Seveda, ni to edina rešitev, je pa možna in tudi včasih uporabljena.
tudi tisto s strukturo lahko pride prav. Npr. obstajalo je določeno obdobje, ko standard za web service ni bil dorečen kar se tiče napak/izjem (predvsem zaradi nekaterih jezikov, ki tega mehanizma ne poznajo) in zato se je bilo dobro izogibati SoapFault-om, ker je npr. prišlo do razhajanj pri obravnavi le-teh med .NET-om in Javo (sedaj so zadeve že bolj urejene). No, takrat je bila uporaba flagov edina pametna rešitev in ne vidim, zakaj ne bi flagov in drugi podatkov pač zapakiral v kako strukturo, ki se vrača kot rezultat. Seveda, ni to edina rešitev, je pa možna in tudi včasih uporabljena.
CWIZO ::
MaCoFacO: to akr si ti povedal je cist neki drugega, kar so prej predlagal.
Prej so predlagal da ti iz metode vrnes strukturo v kateri so dejanski podatki ki jih rabis in pa nek flag ki ti pove ce se je funkcija pravilno izvrsila.
Prej so predlagal da ti iz metode vrnes strukturo v kateri so dejanski podatki ki jih rabis in pa nek flag ki ti pove ce se je funkcija pravilno izvrsila.
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
CWIZO ::
again: za navadne aplikacije to nikakor ni resitev.
Web servisi so pa druga zgodba (kot si rekel)
Web servisi so pa druga zgodba (kot si rekel)
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
MaCoFaCo ::
CWIZO: kar sem povedal je ravno to. Da ima funkcija na BL nivoju poleg dejanskih podatkov, predviden še prostor za napake. Takšna struktura se potem serializira v stream (večinoma XML) in na klientu odpakira nazaj v strukturo. Ta potem najprej čekira error polje in če ugotovi da ni prazno, sporoči uporabniku da je prišlo do napake. V nasprotnem primeru se vzamejo podatki in dela z njimi naprej.
CWIZO ::
beri post pred tvojim zadnjim.
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...
MaCoFaCo ::
Hehe, odvisno kako definiraš "navadna aplikacija". In BL nivo sploh ni nujno da je web service.
Res pa je da se to dela samo pri večjih projektih, predstaviti sem samo hotel širši pogled :P
Res pa je da se to dela samo pri večjih projektih, predstaviti sem samo hotel širši pogled :P
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#, SQLite] update to databaseOddelek: Programiranje | 664 (543) | Yacked2 |
» | [VB] datagridviewOddelek: Programiranje | 1938 (1321) | korenje3 |
» | c# - mssql kombinacija / problem pri zapisu row-a v bazoOddelek: Programiranje | 1595 (1404) | darkolord |
» | razložitev nekaterij elementov v visual studio 05Oddelek: Programiranje | 2106 (1911) | darkolord |
» | [C#] DATA GRID VIEWOddelek: Programiranje | 1942 (1822) | Kekec |