Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
-
raiseişlevi, bir hatanın veya istisnai koşulun oluştuğuna işaret etmek için kullanılır. Hata hakkındaki bilgiler bir özel durum nesnesinde yakalanır. -
reraiseİşlev, çağrı zincirinde işlenen bir özel durumu yaymak için kullanılır.
Sözdizimi
raise (expression)
Açıklamalar
raise İşlev bir özel durum nesnesi oluşturur ve yığın geri sarma işlemini başlatır. Yığın geri sarma işlemi ortak dil çalışma zamanı (CLR) tarafından yönetilir, bu nedenle bu işlemin davranışı diğer tüm .NET dillerinde olduğu gibi aynıdır. Yığın geri sarma işlemi, oluşturulan özel durumla eşleşen bir özel durum işleyicisi için yapılan bir aramadır. Arama, varsa geçerli try...with ifadede başlar. Bloktaki with her desen sırayla denetlenir. Eşleşen bir özel durum işleyicisi bulunduğunda, özel durum işlenmiş olarak kabul edilir; aksi takdirde, yığın kaldırılır ve with eşleşen bir işleyici bulunana kadar çağrı zincirini engeller denetlenir. Çağrı zincirinde karşılaşılan tüm finally bloklar da yığın gevşedikçe sırayla yürütülür.
raise işlevi C# veya C++ ile eşdeğerdirthrow.
Aşağıdaki kod örnekleri, özel durum oluşturmak için işlevinin raise kullanımını gösterir.
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
İşlev, raise aşağıdaki örnekte gösterildiği gibi .NET özel durumlarını yükseltmek için de kullanılabilir.
let divide x y =
if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
else
x / y
Özel durumu yeniden değerlendirme
İşlev, reraise çağrı zincirinde işlenen bir özel durumu yaymak için bir with blokta kullanılabilir.
reraise özel durum işleneni almaz. Yöntemin bir bağımsız değişkeni çağırandan başka bir kitaplık yöntemine geçirmesi ve kitaplık yönteminin çağırana geçirilmesi gereken bir özel durum oluşturması en kullanışlı yöntemdir.
İşlev, reraise veya dahil olmak üzere task { .. } hesaplanan listelerdeki, dizilerdeki, dizilerdeki veya hesaplama ifadelerindeki yapı bloğunda with/trywith kullanılamaz.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@()