C# Snabbreferens
  • C# snabbreferens
  • Lathund: Skapa projekt
  • Lathund: koda i konsolen
  • Lathund: koda i WPF
  • Kompilering och publicering
  • Externa resurser
  • Grundläggande
    • Datatyper […]
      • String
      • Tuples
      • Enum
    • Fel
    • Typkonvertering
    • Operatorer
    • Boolska satser
    • Konsolen (Console)
    • If-satser
    • Loopar
    • Listor och arrayer
    • Slump (Random)
    • Strings
    • Metoder
    • Använda bibliotek (using)
    • Delegates, events och lambdas
    • Matematik (Math)
    • Vektorer (Numerics)
    • Datum och tid
    • Try-catch och Exception
    • Namngivning
    • Begrepp
    • Reference vs value types
    • Projektstruktur
    • Dotnet i terminalen
  • Filhantering
    • Filsökvägar
    • Läsa och skriva
    • Filer och mappar
    • Open, close, using
    • Serialisering […]
      • JSON-serialisering
      • XML-serialisering
    • Resursfiler
    • Filformat
      • JSON
  • Klasser och objektorientering
    • Översikt objektorientering
    • Lathund för klassdesign
    • Klasser och instanser
    • Struct
    • Public, private och protected
    • Klassdiagram
    • Klassmetoder
    • Konstruktorer
    • Arv
    • Komposition
    • Inkapsling och properties
    • Static
    • Polymorfism […]
      • Virtual, override
    • Generiska klasser
    • Abstract
    • Interface
    • Attribut
  • Annat
    • RayLib […]
      • Raylib setup
      • Fönster i Raylib
      • Grundläggande grafik
      • Geometriska former
      • Bilder och texturer
        • Texture
        • Image
      • Input
      • Text
      • Rectangle
      • Kollisioner
      • Kamera
      • Ljud
      • Raylib-CSharp*
    • MonoGame […]
      • Monogame-projekt*
      • MCGB Editor*
      • Input*
      • Grafik*
      • Kollisioner
      • Ljud*
    • Nätverk och internet […]
      • CRUD, HTTP och REST
      • URL:er och REST
      • RESTful client*
      • Thunder
      • RESTful server (Minimal API)
        • Swagger och OpenAPI
      • RESTful server (Web API) […]
        • Controllers
        • Models/dataklasser
        • Tester med RESTer
    • Linq
      • Linq-metoder
      • Linq-queries
    • Databaser
      • SQLite-kommandon
      • SQLite och VSCode
      • C# och SQLite
      • Entity Framework Core
    • Threading
      • Thread
      • Task
    • Pseudokod och diagram
    • Windows UI
      • WPF
      • XAML*
      • WinUI*
  • Mjukvara
    • Dotnet SDK
    • Visual Studio Code […]
      • Extensions
      • Inställningar
      • Debugging
      • Snabbkommandon
      • Snippets
      • Felsökning
    • Git & GitHub […]
      • Git-begrepp
    • Andra verktyg
  • Tekniker
    • Begränsa input
    • Game states
    • Gå igenom en array (eller lista)
    • Länkade listor och andra strukturer
    • Ta bort saker ur listan man går igenom
    • 2D-spelbräden
    • Timers
  • CONTRIBUTING
Powered by GitBook
On this page
  • Try och catch
  • Att fånga specifika fel
  • Throw
  • Kasta upp
  • Exception-typer är klasser

Was this helpful?

  1. Grundläggande

Try-catch och Exception

Try och catch

När man lägger in kod i ett try-block så förhindrar det att programmet avslutas när ett runtime-fel inträffar, t.ex. att man försöker konvertera något som inte kan konverteras eller komma åt ett index som inte finns i en array. Kort sagt försöker C# köra koden. Istället avbryts körningen, och programmet hoppar istället ner till det catch-block som står under.

int[] nums = {4, 5, 7};

try
{
  Console.WriteLine(nums[8]); // Orsakar ett IndexOutOfRange-fel
}
catch
{
  Console.WriteLine("Nope!");
}

Ett Try-block måste alltid paras ihop med minst ett Catch-block.

Att fånga specifika fel

När man får ett runtime-fel så talar C# alltid om vad det är för fel.

Om du vill skriva ett catch-block för att fånga ett specifikt fel så specificerar du feltypen inom parenteser.

int[] nums = { 4, 5, 7 };

try
{
  Console.WriteLine(nums[8]);
}
catch (System.IndexOutOfRangeException)
{
  Console.WriteLine("Fel index!");
}

Du kan skriva in flera olika catch-block om du vill:

int[] nums = { 4, 5, 7 };

try
{
  Console.WriteLine(nums[8]);
}
catch (System.IndexOutOfRangeException)
{
  Console.WriteLine("Fel index!");
}
catch
{
  Console.WriteLine("Något annat fel!");
}

Throw

Om du vill kan du, i dina egna metoder, ge upphov till ett exception som sedan måste catch:as där metoden anropas. På så vis måste du inte hantera alla fel direkt, utan kan sköta allt sådant på ett ställe.

static int DoThing(int i)
{
  int[] nums = { 4, 5, 7 };
  
  if (i >= nums.Length || i < 0)
  {
    throw new IndexOutOfRangeException();
  }
  
  return nums[i];
}

Kasta upp

Om du catch:ar ett fel du inte vill hantera direkt, så kan du helt enkelt använda throw för att tvinga den som anropade den nuvarande metoden att hantera felet.

static int DoThing(int i)
{
  int[] nums = { 4, 5, 7 };
  try
  {
    return nums[i];
  }
  catch
  {
    throw;
  }
}

Exception-typer är klasser

int[] nums = { 4, 5, 7 };
try
{
  Console.WriteLine(nums[8]);
}
catch (Exception e)
{
  if (e is System.IndexOutOfRangeException)
  {
    Console.WriteLine("Indexfel!");
  }
}
PreviousDatum och tidNextNamngivning

Last updated 2 years ago

Was this helpful?

System.IndexOutOfRangeException är en , liksom alla andra sorters exceptions. De har alla System.Exception som . Det gör att man kan fånga in alla exceptions genom att catch:a System.Exception och sedan undersöka felet man fått genom t.ex. is.

klass
basklass