Exception.InnerException Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan instans Exception yang menyebabkan pengecualian saat ini.
public:
property Exception ^ InnerException { Exception ^ get(); };
public Exception InnerException { get; }
public Exception? InnerException { get; }
member this.InnerException : Exception
Public ReadOnly Property InnerException As Exception
Nilai Properti
Objek yang menjelaskan kesalahan yang menyebabkan pengecualian saat ini. Properti InnerException mengembalikan nilai yang sama seperti yang diteruskan ke Exception(String, Exception) konstruktor, atau null jika nilai pengecualian dalam tidak diberikan ke konstruktor. Properti ini hanya dapat dibaca.
Penerapan
Contoh
Contoh berikut menunjukkan pelemparan dan penangkapan pengecualian yang mereferensikan pengecualian dalam.
using System;
public class AppException : Exception
{
public AppException(String message) : base (message)
{}
public AppException(String message, Exception inner) : base(message,inner) {}
}
public class Example
{
public static void Main()
{
Example ex = new Example();
try {
ex.CatchInner();
}
catch(AppException e) {
Console.WriteLine ("In catch block of Main method.");
Console.WriteLine("Caught: {0}", e.Message);
if (e.InnerException != null)
Console.WriteLine("Inner exception: {0}", e.InnerException);
}
}
public void ThrowInner ()
{
throw new AppException("Exception in ThrowInner method.");
}
public void CatchInner()
{
try {
this.ThrowInner();
}
catch (AppException e) {
throw new AppException("Error in CatchInner caused by calling the ThrowInner method.", e);
}
}
}
// The example displays the following output:
// In catch block of Main method.
// Caught: Error in CatchInner caused by calling the ThrowInner method.
// Inner exception: AppException: Exception in ThrowInner method.
// at Example.ThrowInner()
// at Example.CatchInner()
open System
type AppException =
inherit Exception
new (message: string) = { inherit Exception(message) }
new (message: string, inner) = { inherit Exception(message, inner) }
let throwInner () =
raise (AppException "Exception in throwInner function.")
()
let catchInner () =
try
throwInner ()
with :? AppException as e ->
raise (AppException("Error in catchInner caused by calling the throwInner function.", e) )
[<EntryPoint>]
let main _ =
try
catchInner ()
with :? AppException as e ->
printfn "In with block of main function."
printfn $"Caught: {e.Message}"
if e.InnerException <> null then
printfn $"Inner exception: {e.InnerException}"
0
// The example displays the following output:
// In with block of main function.
// Caught: Error in catchInner caused by calling the throwInner function.
// Inner exception: Example+AppException: Exception in throwInner function.
// at Example.throwInner()
// at Example.catchInner()
Public Class AppException : Inherits Exception
Public Sub New(message As String)
MyBase.New(message)
End Sub
Public Sub New(message As String, inner As Exception)
MyBase.New(message, inner)
End Sub
End Class
Public Class Example
Public Shared Sub Main()
Dim testInstance As New Example()
Try
testInstance.CatchInner()
Catch e As AppException
Console.WriteLine ("In catch block of Main method.")
Console.WriteLine("Caught: {0}", e.Message)
If e.InnerException IsNot Nothing Then
Console.WriteLine("Inner exception: {0}", e.InnerException)
End If
End Try
End Sub
Public Sub ThrowInner()
Throw New AppException("Exception in ThrowInner method.")
End Sub
Public Sub CatchInner()
Try
Me.ThrowInner()
Catch e As AppException
Throw New AppException("Error in CatchInner caused by calling the ThrowInner method.", e)
End Try
End Sub
End Class
' The example displays the following output:
' In catch block of Main method.
' Caught: Error in CatchInner caused by calling the ThrowInner method.
' Inner exception: AppException: Exception in ThrowInner method.
' at Example.ThrowInner()
' at Example.CatchInner()
Keterangan
Ketika pengecualian X dilemparkan sebagai hasil langsung dari pengecualian Ysebelumnya, InnerException properti X harus berisi referensi ke Y.
InnerException Gunakan properti untuk mendapatkan serangkaian pengecualian yang mengarah ke pengecualian saat ini.
Anda dapat membuat pengecualian baru yang menangkap pengecualian sebelumnya. Kode yang menangani pengecualian kedua dapat menggunakan informasi tambahan dari pengecualian sebelumnya untuk menangani kesalahan dengan lebih tepat.
Misalkan ada fungsi yang membaca file dan memformat data dari file tersebut. Dalam contoh ini, karena kode mencoba membaca file, sebuah IOException dilemparkan. Fungsi ini menangkap IOException dan melempar FileNotFoundException. IOException dapat disimpan di InnerException properti FileNotFoundException, memungkinkan kode yang menangkap FileNotFoundException untuk memeriksa penyebab kesalahan awal.
Properti InnerException , yang menyimpan referensi ke pengecualian dalam, diatur pada inisialisasi objek pengecualian.