CS-Opas:Virheenkäsittely

Mureakuha

Loikkaa: valikkoon, hakuun
Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Virheidenkäsittely.

Sisällysluettelo

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 
 

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);
		}
	}
}

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");
			}
		}
		
	}
}

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ä.";
		}
	}
}
Henkilökohtaiset työkalut