Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
- Funktionen 
raiseanvänds för att indikera att ett fel eller ett exceptionellt villkor har inträffat. Information om felet samlas in i ett undantagsobjekt. - Funktionen 
reraiseanvänds för att sprida ett hanterat undantag i anropskedjan. 
Syntax
raise (expression)
Anmärkningar
Funktionen raise genererar ett undantagsobjekt och initierar en rensningsprocess för stacken. Processen för att varva ned stacken hanteras av CLR (Common Language Runtime), så beteendet för den här processen är detsamma som på andra .NET-språk. Processen för att varva ned stacken är en sökning efter en undantagshanterare som matchar det genererade undantaget. Sökningen startar i det aktuella try...with uttrycket, om det finns ett. Varje mönster i with blocket är markerat i ordning. När en matchande undantagshanterare hittas betraktas undantaget som hanterat. Annars tas stacken bort och with blockerar anropskedjan tills en matchande hanterare hittas. Alla finally block som påträffas i anropskedjan körs också i följd när stacken varvar ned.
Funktionen raise motsvarar throw i C# eller C++.
Följande kodexempel illustrerar användningen av raise funktionen för att generera ett undantag.
exception InnerError of string
exception OuterError of string
let function1 x y =
   try
     try
        if x = y then raise (InnerError("inner"))
        else raise (OuterError("outer"))
     with
      | InnerError(str) -> printfn "Error1 %s" str
   finally
      printfn "Always print this."
let function2 x y =
  try
     function1 x y
  with
     | OuterError(str) -> printfn "Error2 %s" str
function2 100 100
function2 100 10
Funktionen raise kan också användas för att skapa .NET-undantag, som du ser i följande exempel.
let divide x y =
  if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
  else
     x / y
Ändra storlek på ett undantag
Funktionen reraise kan användas i ett with block för att sprida ett hanterat undantag i anropskedjan.
              reraise tar inte en undantagsopernd. Det är mest användbart när en metod skickar ett argument från en anropare till någon annan biblioteksmetod, och biblioteksmetoden genererar ett undantag som måste skickas till anroparen.
Funktionen reraise kanske inte används i byggblocket withtrywith/i beräknade listor, matriser, sekvenser eller beräkningsuttryck inklusive task { .. } eller .async { .. }
open System
let getFirstCharacter(value: string) =
    try
        value[0]
    with :? IndexOutOfRangeException as e ->
        reraise()
let s = getFirstCharacter("")
Console.WriteLine($"The first character is {s}")
// The example displays the following output:
//   System.IndexOutOfRangeException: Index was outside the bounds of the array.
//      at System.String.get_Chars(Int32 index)
//      at getFirstCharacter(String value)
//      at <StartupCode>.main@()