CS-Opas:Virheenkäsittely
Mureakuha
- Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Virheidenkäsittely.
Sisällysluettelo |
[muokkaa]
Johdanto
TRY, CATCH, FINALLY tutkinta THROW nostaa poikkeuksen CHECKED tarkempaan tutkimiseen. CHECKED nostaa OverflowException-virheen ylivuodon havaittuaan
int i = int.MaxValue; // i=2147483647 i++; //Ylivuoto i=-2147483648
[muokkaa]
Virheen selvitys esimerkki
using System; public class Virheenkasittely1 { public static void Main() { try { int h = 45; int g = 0; int a = h/g; //Jako nollalla virhe Console.WriteLine("{0}",a); //Tulostus yritys } catch(DivideByZeroException e) { //Nollajakaminen Console.WriteLine("Nollalla jakaminen ei onnistu"); Console.WriteLine("Selite: {0}",e.Message); Console.WriteLine("Tyyppi: {0}",e.TargetSite.DeclaringType.FullName); Console.WriteLine("Metodi: {0}",e.TargetSite.Name); Console.WriteLine("Sijainti: {0}",e.StackTrace); Console.WriteLine("Koodi: {0}",e.Source); } catch(Exception e) { //Yleinen virhe) Console.WriteLine("Virhe tapahtunut, tässä selvitys"); Console.WriteLine("Selite: {0}",e.Message); Console.WriteLine("Tyyppi: {0}",e.TargetSite.DeclaringType.FullName); Console.WriteLine("Metodi: {0}",e.TargetSite.Name); Console.WriteLine("Sijainti: {0}",e.StackTrace); Console.WriteLine("Koodi: {0}",e.Source); } } }
[muokkaa]
Finally esimerkki
using System; public class Yritys2 { public Yritys2() {} public void SetNimi(String nimi) { if(nimi.Length < 3) { //Nimi ei saa olla alle kolmemerkkiä pitkä throw new Exception(); } } public static void Main() { Yritys2 y2 = new Yritys2(); try { y2.SetNimi("g"); } catch(Exception e) { Console.WriteLine("Virhe nimeämisessä"); } finally { //varmistetaan, että muistia ei mene hukkaan if(y2 != null) { y2 = null; Console.WriteLine("y2 asetettu null arvoon"); } else { Console.WriteLine("y2 oli jo null"); } } } }
[muokkaa]
Throw esimerkki
using System; public class Yritys2 { public Yritys2() {} public void SetNimi(String nimi) { if(nimi.Length < 3) { //Nimi ei saa olla alle kolmemerkkiä pitkä throw new OmaException(nimi); } } public static void Main() { Yritys2 y2 = new Yritys2(); try { y2.SetNimi("g"); } catch(OmaException e) { Console.WriteLine(e.Message); } finally { //varmistetaan, että muistia ei mene hukkaan if(y2 != null) { y2 = null; Console.WriteLine("y2 asetettu null arvoon"); } else { Console.WriteLine("y2 oli jo null"); } } } } public class OmaException: Exception { private string nimi; public OmaException(string nimi):base() { this.nimi = nimi; } public override string Message { get { return "Nimen pitää olla vähintää kolme merkkiä pitkä. \n" +"Antamasi nimi '" + nimi + "' ei ole yli kolmea merkkiä pitkä."; } } }
