15. maj 2007 - 20:19Der er
9 kommentarer og 1 løsning
Kaste en exception
Jeg har en container som (hashtable) af en række personer Ved tilføjelse af personer til containeren giver brug af samme nøgle 2 gange giver en fejl. Hvordan kaster jeg en exception, som forplanter sig hele vejen op til gui-laget gennem controlleren?
Jeg vil gerne have Gui-laget til at vise en messagebox hvis der er en exception i containerlaget.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du kan kaste en almindelig exception sådan her: throw new System.Exception("Two identical keys");
og fange den i din GUI ved at lave en try-catch: try { // your business that maybe will throw an exception } catch(Exception exp) { MessageBox.Show(exp.Message); }
Der hvor du kaster din exception skal du være opmærksom på, at lige meget hvilken fejl der sker når du prøver at lave en Add, vil fejlen blive "Two identical keys". Dette er også tilfældet hvis kontaktListe eksempelvis er null.
Der hvor du fanger din exception ser umiddelbart fint ud.
Hvordan håndtere jeg så det ? Det rigtigste ville vel være at fange fejlen, der hvor objektet blev oprettet. Men hvis man nu antog at man ville fange den i følgende kode hvordan ville man så gøre ?
En god løsning ville være at lave en custom execption, eksempelsvis ContactIdenticalKeysException, som bliver kastet når du laver en Add til kontaktlisten. Og du behøver egentlig ikke lave en try, catch udenom din kontaktListe.Add, medmindre at den kaster en exception som du vil ændre på. Hver gang der sker en try, catch koster det performance.
Så du kunne gøre noget med:
public void Add(Kontakt k) { bool doesContactExists = false; //TODO if(doesContactExists) throw new ContactIdenticalKeysException();
kontaktListe.Add(k.CprNr, k); }
public abstract class ContactIdenticalKeysException: ApplicationException { public ContactIdenticalKeysException() : base(){} public ContactIdenticalKeysException(string message) : base("Two identical keys"){} }
Der hvor du så fanger den har du mulighed for at lave en bedre catch:
Selvom du ikke har besvaret mit sidste spørgsmål, må du hellere få point. Her kommmer de.
Michael
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.