Exception 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 Exception 類別的新執行個體。
多載
| 名稱 | Description |
|---|---|
| Exception() |
初始化 Exception 類別的新執行個體。 |
| Exception(String) |
初始化類別的新實例 Exception 並指定錯誤訊息。 |
| Exception(SerializationInfo, StreamingContext) |
已淘汰.
使用串行化數據,初始化 Exception 類別的新實例。 |
| Exception(String, Exception) |
初始化類別的新實例 Exception ,並附上指定的錯誤訊息及導致該異常的內部例外的參考。 |
Exception()
初始化 Exception 類別的新執行個體。
public:
Exception();
public Exception();
Public Sub New ()
範例
以下程式碼範例推導出 Exception 使用預設訊息的 。 程式碼展示了派生類別與基底 Exception 類別使用無參數建構子的方法。
// Example for the Exception( ) constructor.
using System;
namespace NDP_UE_CS
{
// Derive an exception with a predefined message.
class NotEvenException : Exception
{
public NotEvenException( ) :
base( "The argument to a function requiring " +
"even input is not divisible by 2." )
{ }
}
class NewExceptionDemo
{
public static void Main()
{
Console.WriteLine(
"This example of the Exception( ) constructor " +
"generates the following output." );
Console.WriteLine(
"\nHere, an exception is thrown using the \n" +
"parameterless constructor of the base class.\n" );
CalcHalf( 12 );
CalcHalf( 15 );
Console.WriteLine(
"\nHere, an exception is thrown using the \n" +
"parameterless constructor of a derived class.\n" );
CalcHalf2( 24 );
CalcHalf2( 27 );
}
// Half throws a base exception if the input is not even.
static int Half( int input )
{
if( input % 2 != 0 )
throw new Exception( );
else return input / 2;
}
// Half2 throws a derived exception if the input is not even.
static int Half2( int input )
{
if( input % 2 != 0 )
throw new NotEvenException( );
else return input / 2;
}
// CalcHalf calls Half and catches any thrown exceptions.
static void CalcHalf(int input )
{
try
{
int halfInput = Half( input );
Console.WriteLine(
"Half of {0} is {1}.", input, halfInput );
}
catch( Exception ex )
{
Console.WriteLine( ex.ToString( ) );
}
}
// CalcHalf2 calls Half2 and catches any thrown exceptions.
static void CalcHalf2(int input )
{
try
{
int halfInput = Half2( input );
Console.WriteLine(
"Half of {0} is {1}.", input, halfInput );
}
catch( Exception ex )
{
Console.WriteLine( ex.ToString( ) );
}
}
}
}
/*
This example of the Exception( ) constructor generates the following output.
Here, an exception is thrown using the
parameterless constructor of the base class.
Half of 12 is 6.
System.Exception: Exception of type System.Exception was thrown.
at NDP_UE_CS.NewExceptionDemo.Half(Int32 input)
at NDP_UE_CS.NewExceptionDemo.CalcHalf(Int32 input)
Here, an exception is thrown using the
parameterless constructor of a derived class.
Half of 24 is 12.
NDP_UE_CS.NotEvenException: The argument to a function requiring even input is
not divisible by 2.
at NDP_UE_CS.NewExceptionDemo.Half2(Int32 input)
at NDP_UE_CS.NewExceptionDemo.CalcHalf2(Int32 input)
*/
// Example for the Exception() constructor.
open System
// Derive an exception with a predefined message.
type NotEvenException() =
inherit Exception "The argument to a function requiring even input is not divisible by 2."
// half throws a base exception if the input is not even.
let half input =
if input % 2 <> 0 then
raise (Exception())
else input / 2
// half2 throws a derived exception if the input is not even.
let half2 input =
if input % 2 <> 0 then
raise (NotEvenException())
else input / 2
// calcHalf calls Half and catches any thrown exceptions.
let calcHalf input =
try
let halfInput = half input
printfn $"Half of {input} is {halfInput}."
with ex ->
printfn $"{ex}"
// calcHalf2 calls Half2 and catches any thrown exceptions.
let calcHalf2 input =
try
let halfInput = half2 input
printfn $"Half of {input} is {halfInput}."
with ex ->
printfn $"{ex}"
printfn "This example of the Exception() constructor generates the following output."
printfn "\nHere, an exception is thrown using the \nparameterless constructor of the base class.\n"
calcHalf 12
calcHalf 15
printfn "\nHere, an exception is thrown using the \nparameterless constructor of a derived class.\n"
calcHalf2 24
calcHalf2 27
// This example of the Exception() constructor generates the following output.
// Here, an exception is thrown using the
// parameterless constructor of the base class.
//
// Half of 12 is 6.
// System.Exception: Exception of type 'System.Exception' was thrown.
// at NDP_UE_FS.half(Int32 input)
// at at NDP_UE_FS.calcHalf(Int32 input)
//
// Here, an exception is thrown using the
// parameterless constructor of a derived class.
//
// Half of 24 is 12.
// NDP_UE_FS+NotEvenException: The argument to a function requiring even input is
// not divisible by 2.
// at NDP_UE_FS.half2(Int32 input)
// at NDP_UE_FS.calcHalf2(Int32 input)
' Example for the Exception( ) constructor.
Namespace NDP_UE_VB
' Derive an exception with a predefined message.
Class NotEvenException
Inherits Exception
Public Sub New( )
MyBase.New( _
"The argument to a function requiring " & _
"even input is not divisible by 2." )
End Sub
End Class
Module NewExceptionDemo
Sub Main( )
Console.WriteLine( _
"This example of the Exception( ) constructor " & _
"generates the following output." )
Console.WriteLine( vbCrLf & _
"Here, an exception is thrown using the " & vbCrLf & _
"parameterless constructor of the base class." & _
vbCrLf )
CalcHalf( 12 )
CalcHalf( 15 )
Console.WriteLine(vbCrLf & _
"Here, an exception is thrown using the " & vbCrLf & _
"parameterless constructor of a derived class." & _
vbCrLf )
CalcHalf2( 24 )
CalcHalf2( 27 )
End Sub
' Half throws a base exception if the input is not even.
Function Half( input As Integer ) As Integer
If input Mod 2 <> 0 Then
Throw New Exception( )
Else
Return input / 2
End If
End Function ' Half
' Half2 throws a derived exception if the input is not even.
Function Half2( input As Integer ) As Integer
If input Mod 2 <> 0 Then
Throw New NotEvenException( )
Else
Return input / 2
End If
End Function ' Half2
' CalcHalf calls Half and catches any thrown exceptions.
Sub CalcHalf( input As Integer )
Try
Dim halfInput As Integer = Half( input )
Console.WriteLine( _
"Half of {0} is {1}.", input, halfInput )
Catch ex As Exception
Console.WriteLine( ex.ToString( ) )
End Try
End Sub
' CalcHalf2 calls Half2 and catches any thrown exceptions.
Sub CalcHalf2( input As Integer )
Try
Dim halfInput As Integer = Half2( input )
Console.WriteLine( _
"Half of {0} is {1}.", input, halfInput )
Catch ex As Exception
Console.WriteLine( ex.ToString( ) )
End Try
End Sub
End Module ' NewExceptionDemo
End Namespace ' NDP_UE_VB
' This example of the Exception( ) constructor generates the following output.
'
' Here, an exception is thrown using the
' parameterless constructor of the base class.
'
' Half of 12 is 6.
' System.Exception: Exception of type System.Exception was thrown.
' at NDP_UE_VB.NewExceptionDemo.Half(Int32 input)
' at NDP_UE_VB.NewExceptionDemo.CalcHalf(Int32 input)
'
' Here, an exception is thrown using the
' parameterless constructor of a derived class.
'
' Half of 24 is 12.
' NDP_UE_VB.NotEvenException: The argument to a function requiring even input i
' s not divisible by 2.
' at NDP_UE_VB.NewExceptionDemo.Half2(Int32 input)
' at NDP_UE_VB.NewExceptionDemo.CalcHalf2(Int32 input)
備註
此建構子將新實例的屬性初始 Message 化為系統提供的訊息,描述錯誤並考量當前系統文化。
所有衍生類別都應該提供這個無參數建構子。 下表顯示了 的 Exception初始屬性值。
| 房產 | 價值 |
|---|---|
| InnerException | 一個空參考(Nothing Visual Basic 中的 Reference)。 |
| Message | 系統提供的在地描述。 |
適用於
Exception(String)
- 來源:
- Exception.cs
- 來源:
- Exception.cs
- 來源:
- Exception.cs
- 來源:
- Exception.cs
- 來源:
- Exception.cs
初始化類別的新實例 Exception 並指定錯誤訊息。
public:
Exception(System::String ^ message);
public Exception(string message);
public Exception(string? message);
new Exception : string -> Exception
Public Sub New (message As String)
參數
- message
- String
描述錯誤的訊息。
範例
以下程式碼範例針對特定條件推導出 。Exception 程式碼展示了使用建構子,該建構子將呼叫者指定的訊息作為參數,適用於衍生類別與基底 Exception 類別。
// Example for the Exception( string ) constructor.
using System;
namespace NDP_UE_CS2
{
// Derive an exception with a specifiable message.
class NotEvenException : Exception
{
const string notEvenMessage =
"The argument to a function requiring " +
"even input is not divisible by 2.";
public NotEvenException( ) :
base( notEvenMessage )
{ }
public NotEvenException( string auxMessage ) :
base( String.Format( "{0} - {1}",
auxMessage, notEvenMessage ) )
{ }
}
class NewSExceptionDemo
{
public static void Main()
{
Console.WriteLine(
"This example of the Exception( string )\n" +
"constructor generates the following output." );
Console.WriteLine(
"\nHere, an exception is thrown using the \n" +
"constructor of the base class.\n" );
CalcHalf( 18 );
CalcHalf( 21 );
Console.WriteLine(
"\nHere, an exception is thrown using the \n" +
"constructor of a derived class.\n" );
CalcHalf2( 30 );
CalcHalf2( 33 );
}
// Half throws a base exception if the input is not even.
static int Half( int input )
{
if( input % 2 != 0 )
throw new Exception( String.Format(
"The argument {0} is not divisible by 2.",
input ) );
else return input / 2;
}
// Half2 throws a derived exception if the input is not even.
static int Half2( int input )
{
if( input % 2 != 0 )
throw new NotEvenException(
String.Format( "Invalid argument: {0}", input ) );
else return input / 2;
}
// CalcHalf calls Half and catches any thrown exceptions.
static void CalcHalf(int input )
{
try
{
int halfInput = Half( input );
Console.WriteLine(
"Half of {0} is {1}.", input, halfInput );
}
catch( Exception ex )
{
Console.WriteLine( ex.ToString( ) );
}
}
// CalcHalf2 calls Half2 and catches any thrown exceptions.
static void CalcHalf2(int input )
{
try
{
int halfInput = Half2( input );
Console.WriteLine(
"Half of {0} is {1}.", input, halfInput );
}
catch( Exception ex )
{
Console.WriteLine( ex.ToString( ) );
}
}
}
}
/*
This example of the Exception( string )
constructor generates the following output.
Here, an exception is thrown using the
constructor of the base class.
Half of 18 is 9.
System.Exception: The argument 21 is not divisible by 2.
at NDP_UE_CS.NewSExceptionDemo.Half(Int32 input)
at NDP_UE_CS.NewSExceptionDemo.CalcHalf(Int32 input)
Here, an exception is thrown using the
constructor of a derived class.
Half of 30 is 15.
NDP_UE_CS.NotEvenException: Invalid argument: 33 - The argument to a function r
equiring even input is not divisible by 2.
at NDP_UE_CS.NewSExceptionDemo.Half2(Int32 input)
at NDP_UE_CS.NewSExceptionDemo.CalcHalf2(Int32 input)
*/
// Example for the Exception(string) constructor.
open System
let notEvenMessage = "The argument to a function requiring even input is not divisible by 2."
// Derive an exception with a specifiable message.
type NotEvenException =
inherit Exception
new () = { inherit Exception(notEvenMessage) }
new (auxMessage) = { inherit Exception($"{auxMessage} - {notEvenMessage}") }
// half throws a base exception if the input is not even.
let half input =
if input % 2 <> 0 then
raise (Exception $"The argument {input} is not divisible by 2.")
else input / 2
// half2 throws a derived exception if the input is not even.
let half2 input =
if input % 2 <> 0 then
raise (NotEvenException $"Invalid argument: {input}")
else input / 2
// calcHalf calls Half and catches any thrown exceptions.
let calcHalf input =
try
let halfInput = half input
printfn $"Half of {input} is {halfInput}."
with ex ->
printfn $"{ex}"
// calcHalf2 calls Half2 and catches any thrown exceptions.
let calcHalf2 input =
try
let halfInput = half2 input
printfn $"Half of {input} is {halfInput}."
with ex ->
printfn $"{ex}"
printfn "This example of the Exception(string)\nconstructor generates the following output."
printfn "\nHere, an exception is thrown using the \nconstructor of the base class.\n"
calcHalf 18
calcHalf 21
printfn "\nHere, an exception is thrown using the \nconstructor of a derived class.\n"
calcHalf2 30
calcHalf2 33
// This example of the Exception(string)
// constructor generates the following output.
//
// Here, an exception is thrown using the
// constructor of the base class.
//
// Half of 18 is 9.
// System.Exception: The argument 21 is not divisible by 2.
// at NDP_UE_FS_2.half(Int32 input)
// at NDP_UE_FS_2.calcHalf(Int32 input)
//
// Here, an exception is thrown using the
// constructor of a derived class.
//
// Half of 30 is 15.
// NDP_UE_FS_2+NotEvenException: Invalid argument: 33 - The argument to a function r
// equiring even input is not divisible by 2.
// at NDP_UE_FS_2.half2(Int32 input)
// at NDP_UE_FS_2.calcHalf2(Int32 input)
' Example for the Exception( String ) constructor( String ).
Namespace NDP_UE_VB
' Derive an exception with a specifiable message.
Class NotEvenException
Inherits Exception
Private Const notEvenMessage As String = _
"The argument to a function requiring " & _
"even input is not divisible by 2."
Public Sub New()
MyBase.New(notEvenMessage)
End Sub
Public Sub New(auxMessage As String)
MyBase.New(String.Format("{0} - {1}", _
auxMessage, notEvenMessage))
End Sub
End Class
Module NewSExceptionDemo
Sub Main()
Console.WriteLine( _
"This example of the Exception( String )" & vbCrLf & _
"constructor generates the following output." )
Console.WriteLine( vbCrLf & _
"Here, an exception is thrown using the " & vbCrLf & _
"constructor of the base class." & vbCrLf )
CalcHalf(18)
CalcHalf(21)
Console.WriteLine(vbCrLf & _
"Here, an exception is thrown using the " & vbCrLf & _
"constructor of a derived class." & vbCrLf )
CalcHalf2(30)
CalcHalf2(33)
End Sub
' Half throws a base exception if the input is not even.
Function Half(input As Integer) As Integer
If input Mod 2 <> 0 Then
Throw New Exception( String.Format( _
"The argument {0} is not divisible by 2.", _
input ) )
Else
Return input / 2
End If
End Function ' Half
' Half2 throws a derived exception if the input is not even.
Function Half2(input As Integer) As Integer
If input Mod 2 <> 0 Then
Throw New NotEvenException( _
String.Format( "Invalid argument: {0}", input ) )
Else
Return input / 2
End If
End Function ' Half2
' CalcHalf calls Half and catches any thrown exceptions.
Sub CalcHalf(input As Integer)
Try
Dim halfInput As Integer = Half(input)
Console.WriteLine( _
"Half of {0} is {1}.", input, halfInput )
Catch ex As Exception
Console.WriteLine( ex.ToString( ) )
End Try
End Sub
' CalcHalf2 calls Half2 and catches any thrown exceptions.
Sub CalcHalf2( input As Integer )
Try
Dim halfInput As Integer = Half2( input )
Console.WriteLine( _
"Half of {0} is {1}.", input, halfInput )
Catch ex As Exception
Console.WriteLine( ex.ToString( ) )
End Try
End Sub
End Module ' NewSExceptionDemo
End Namespace ' NDP_UE_VB
' This example of the Exception( String )
' constructor generates the following output.
'
' Here, an exception is thrown using the
' constructor of the base class.
'
' Half of 18 is 9.
' System.Exception: The argument 21 is not divisible by 2.
' at NDP_UE_VB.NewSExceptionDemo.Half(Int32 input)
' at NDP_UE_VB.NewSExceptionDemo.CalcHalf(Int32 input)
'
' Here, an exception is thrown using the
' constructor of a derived class.
'
' Half of 30 is 15.
' NDP_UE_VB.NotEvenException: Invalid argument: 33 - The argument to a function
' requiring even input is not divisible by 2.
' at NDP_UE_VB.NewSExceptionDemo.Half2(Int32 input)
' at NDP_UE_VB.NewSExceptionDemo.CalcHalf2(Int32 input)
備註
此建構子透過參數message初始Message化新實例的性質。 若 message 參數為 null,則等同於呼叫 Exception 建構子。
下表顯示了 的 Exception初始屬性值。
| 房產 | 價值 |
|---|---|
| InnerException | 一個空參考(Nothing Visual Basic 中的 Reference)。 |
| Message | 錯誤訊息字串。 |
適用於
Exception(SerializationInfo, StreamingContext)
警告
This API supports obsolete formatter-based serialization. It should not be called or extended by application code.
使用串行化數據,初始化 Exception 類別的新實例。
protected:
Exception(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
[System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
protected Exception(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
protected Exception(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
[<System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new Exception : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> Exception
new Exception : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> Exception
Protected Sub New (info As SerializationInfo, context As StreamingContext)
參數
- info
- SerializationInfo
那 SerializationInfo 個 保留了關於被拋出例外的序列化物件資料。
- context
- StreamingContext
the that StreamingContext 包含了關於來源或目的地的上下文資訊。
- 屬性
例外狀況
info 為 null。
類別名稱為nullHResult零(0)。
範例
以下程式碼範例定義了一個可 Exception 序列化的衍生類別。 程式碼會強制產生除以 0 錯誤,然後使用 (SerializationInfo, StreamingContext) 建構子建立導出例外的實例。 程式碼會將實例序列化成一個檔案,將檔案反序列化成新的例外,然後拋出該例外,然後捕捉並顯示該例外的資料。
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
// Define a serializable derived exception class.
[Serializable]
class SecondLevelException : Exception, ISerializable
{
// This public constructor is used by class instantiators.
public SecondLevelException(string message, Exception inner) :
base(message, inner)
{
HelpLink = "http://MSDN.Microsoft.com";
Source = "Exception_Class_Samples";
}
// This protected constructor is used for deserialization.
protected SecondLevelException(SerializationInfo info,
StreamingContext context) :
base(info, context)
{ }
// GetObjectData performs a custom serialization.
public override void GetObjectData(SerializationInfo info,
StreamingContext context)
{
// Change the case of two properties, and then use the
// method of the base class.
HelpLink = HelpLink.ToLower();
Source = Source.ToUpperInvariant();
base.GetObjectData(info, context);
}
}
class SerializationDemo
{
public static void Main()
{
Console.WriteLine(
"This example of the Exception constructor " +
"and Exception.GetObjectData\nwith Serialization" +
"Info and StreamingContext parameters " +
"generates \nthe following output.\n");
try
{
// This code forces a division by 0 and catches the
// resulting exception.
try
{
int zero = 0;
int ecks = 1 / zero;
}
catch (Exception ex)
{
// Create a new exception to throw again.
SecondLevelException newExcept =
new SecondLevelException(
"Forced a division by 0 and threw " +
"another exception.", ex);
Console.WriteLine(
"Forced a division by 0, caught the " +
"resulting exception, \n" +
"and created a derived exception:\n");
Console.WriteLine("HelpLink: {0}",
newExcept.HelpLink);
Console.WriteLine("Source: {0}",
newExcept.Source);
// This FileStream is used for the serialization.
FileStream stream =
new FileStream("NewException.dat",
FileMode.Create);
try
{
// Serialize the derived exception.
SoapFormatter formatter =
new SoapFormatter(null,
new StreamingContext(
StreamingContextStates.File));
formatter.Serialize(stream, newExcept);
// Rewind the stream and deserialize the
// exception.
stream.Position = 0;
SecondLevelException deserExcept =
(SecondLevelException)
formatter.Deserialize(stream);
Console.WriteLine(
"\nSerialized the exception, and then " +
"deserialized the resulting stream " +
"into a \nnew exception. " +
"The deserialization changed the case " +
"of certain properties:\n");
// Throw the deserialized exception again.
throw deserExcept;
}
catch (SerializationException se)
{
Console.WriteLine("Failed to serialize: {0}",
se.ToString());
}
finally
{
stream.Close();
}
}
}
catch (Exception ex)
{
Console.WriteLine("HelpLink: {0}", ex.HelpLink);
Console.WriteLine("Source: {0}", ex.Source);
Console.WriteLine();
Console.WriteLine(ex.ToString());
}
}
}
/*
This example displays the following output.
Forced a division by 0, caught the resulting exception,
and created a derived exception:
HelpLink: http://MSDN.Microsoft.com
Source: Exception_Class_Samples
Serialized the exception, and then deserialized the resulting stream into a
new exception. The deserialization changed the case of certain properties:
HelpLink: http://msdn.microsoft.com
Source: EXCEPTION_CLASS_SAMPLES
NDP_UE_CS.SecondLevelException: Forced a division by 0 and threw another except
ion. ---> System.DivideByZeroException: Attempted to divide by zero.
at NDP_UE_CS.SerializationDemo.Main()
--- End of inner exception stack trace ---
at NDP_UE_CS.SerializationDemo.Main()
*/
open System
open System.IO
open System.Runtime.Serialization
open System.Runtime.Serialization.Formatters.Soap
open System.Security.Permissions
// Define a serializable derived exception class.
[<Serializable>]
type SecondLevelException =
inherit Exception
interface ISerializable with
// GetObjectData performs a custom serialization.
member this.GetObjectData(info: SerializationInfo, context: StreamingContext) =
// Change the case of two properties, and then use the
// method of the base class.
this.HelpLink <- this.HelpLink.ToLower()
this.Source <- this.Source.ToUpperInvariant()
base.GetObjectData( info, context )
// This public constructor is used by class instantiators.
new (message: string, inner: Exception) as this =
{ inherit Exception(message, inner) }
then
this.HelpLink <- "http://MSDN.Microsoft.com"
this.Source <- "Exception_Class_Samples"
// This protected constructor is used for deserialization.
new (info: SerializationInfo, context: StreamingContext) =
{ inherit Exception(info, context) }
printfn
"""This example of the Exception constructor and Exception.GetObjectData
with SerializationInfo and StreamingContext parameters generates
the following output.
"""
try
// This code forces a division by 0 and catches the
// resulting exception.
try
let zero = 0
let ecks = 1 / zero
()
with ex ->
// Create a new exception to throw again.
let newExcept = SecondLevelException("Forced a division by 0 and threw another exception.", ex)
printfn "Forced a division by 0, caught the resulting exception, \nand created a derived exception:\n"
printfn $"HelpLink: {newExcept.HelpLink}"
printfn $"Source: {newExcept.Source}"
// This FileStream is used for the serialization.
use stream = new FileStream("NewException.dat", FileMode.Create)
try
// Serialize the derived exception.
let formatter = SoapFormatter(null, StreamingContext StreamingContextStates.File)
formatter.Serialize(stream, newExcept)
// Rewind the stream and deserialize the
// exception.
stream.Position <- 0L
let deserExcept = formatter.Deserialize stream :?> SecondLevelException
printfn
"""
Serialized the exception, and then deserialized the resulting stream into a
new exception. The deserialization changed the case of certain properties:
"""
// Throw the deserialized exception again.
raise deserExcept
with :? SerializationException as se ->
printfn $"Failed to serialize: {se}"
with ex ->
printfn $"HelpLink: {ex.HelpLink}"
printfn $"Source: {ex.Source}"
printfn $"\n{ex}"
// This example displays the following output.
// Forced a division by 0, caught the resulting exception,
// and created a derived exception:
//
// HelpLink: http://MSDN.Microsoft.com
// Source: Exception_Class_Samples
//
// Serialized the exception, and then deserialized the resulting stream into a
// new exception. The deserialization changed the case of certain properties:
//
// HelpLink: http://msdn.microsoft.com
// Source: EXCEPTION_CLASS_SAMPLES
//
// NDP_UE_FS_3+SecondLevelException: Forced a division by 0 and threw another except
// ion. ---> System.DivideByZeroException: Attempted to divide by zero.
// at <StartupCode$fs>.$NDP_UE_FS_3.main@()
// --- End of inner exception stack trace ---
// at <StartupCode$fs>.$NDP_UE_FS_3.main@()
' If compiling with the Visual Basic compiler (vbc.exe) from the command
' prompt, be sure to add the following switch:
' /reference:System.Runtime.Serialization.Formatters.Soap.dll
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports System.Security.Permissions
' Define a serializable derived exception class.
<Serializable()> _
Class SecondLevelException
Inherits Exception
' This public constructor is used by class instantiators.
Public Sub New( message As String, inner As Exception )
MyBase.New( message, inner )
HelpLink = "http://MSDN.Microsoft.com"
Source = "Exception_Class_Samples"
End Sub
' This protected constructor is used for deserialization.
Protected Sub New( info As SerializationInfo, _
context As StreamingContext )
MyBase.New( info, context )
End Sub
' GetObjectData performs a custom serialization.
<SecurityPermissionAttribute(SecurityAction.Demand, _
SerializationFormatter:=True)> _
Overrides Sub GetObjectData( info As SerializationInfo, _
context As StreamingContext)
' Change the case of two properties, and then use the
' method of the base class.
HelpLink = HelpLink.ToLower()
Source = Source.ToUpperInvariant()
MyBase.GetObjectData(info, context)
End Sub
End Class
Module SerializationDemo
Sub Main()
Console.WriteLine( _
"This example of the Exception constructor " & _
"and Exception.GetObjectData " & vbCrLf & _
"with SerializationInfo and StreamingContext " & _
"parameters generates " & vbCrLf & _
"the following output." & vbCrLf )
' This code forces a division by 0 and catches the
' resulting exception.
Try
Try
Dim zero As Integer = 0
Dim ecks As Integer = 1 \ zero
' Create a new exception to throw again.
Catch ex As Exception
Dim newExcept As New SecondLevelException( _
"Forced a division by 0 and threw " & _
"another exception.", ex )
Console.WriteLine( _
"Forced a division by 0, caught the " & _
"resulting exception, " & vbCrLf & _
"and created a derived exception:" & vbCrLf )
Console.WriteLine( "HelpLink: {0}", _
newExcept.HelpLink )
Console.WriteLine( "Source: {0}", _
newExcept.Source )
' This FileStream is used for the serialization.
Dim stream As New FileStream( _
"NewException.dat", FileMode.Create )
' Serialize the derived exception.
Try
Dim formatter As New SoapFormatter( Nothing, _
New StreamingContext( _
StreamingContextStates.File ) )
formatter.Serialize( stream, newExcept )
' Rewind the stream and deserialize the
' exception.
stream.Position = 0
Dim deserExcept As SecondLevelException = _
CType( formatter.Deserialize( stream ), _
SecondLevelException )
Console.WriteLine( vbCrLf & _
"Serialized the exception, and then " & _
"deserialized the resulting stream " & _
"into a " & vbCrLf & "new exception. " & _
"The deserialization changed the case " & _
"of certain properties:" & vbCrLf )
' Throw the deserialized exception again.
Throw deserExcept
Catch se As SerializationException
Console.WriteLine( "Failed to serialize: {0}", _
se.ToString( ) )
Finally
stream.Close( )
End Try
End Try
Catch ex As Exception
Console.WriteLine( "HelpLink: {0}", ex.HelpLink )
Console.WriteLine( "Source: {0}", ex.Source )
Console.WriteLine( )
Console.WriteLine( ex.ToString( ) )
End Try
End Sub
End Module
' This example displays the following output:
'
' Forced a division by 0, caught the resulting exception,
' and created a derived exception:
'
' HelpLink: http://MSDN.Microsoft.com
' Source: Exception_Class_Samples
'
' Serialized the exception, and then deserialized the resulting stream into a
' new exception. The deserialization changed the case of certain properties:
'
' HelpLink: http://msdn.microsoft.com
' Source: EXCEPTION_CLASS_SAMPLES
'
' NDP_UE_VB.SecondLevelException: Forced a division by 0 and threw another exce
' ption. ---> System.DivideByZeroException: Attempted to divide by zero.
' at NDP_UE_VB.SerializationDemo.Main()
' --- End of inner exception stack trace ---
' at NDP_UE_VB.SerializationDemo.Main()
備註
此建構子在反序列化過程中被呼叫,以重建透過串流傳輸的例外物件。 欲了解更多資訊,請參閱 XML 與 SOAP 序列化。
另請參閱
適用於
Exception(String, Exception)
- 來源:
- Exception.cs
- 來源:
- Exception.cs
- 來源:
- Exception.cs
- 來源:
- Exception.cs
- 來源:
- Exception.cs
初始化類別的新實例 Exception ,並附上指定的錯誤訊息及導致該異常的內部例外的參考。
public:
Exception(System::String ^ message, Exception ^ innerException);
public Exception(string message, Exception innerException);
public Exception(string? message, Exception? innerException);
new Exception : string * Exception -> Exception
Public Sub New (message As String, innerException As Exception)
參數
- message
- String
錯誤訊息解釋了例外原因。
- innerException
- Exception
該例外是當前例外的原因,或在 Visual Basic 中若未指定內部例外則為空參考Nothing 。
範例
以下程式碼範例針對特定條件推導出 。Exception 程式碼展示了建構子的使用,該建構子將訊息與內部例外作為參數,涵蓋導出類別與基底 Exception 類別。
// Example for the Exception( string, Exception ) constructor.
using System;
namespace NDP_UE_CS
{
// Derive an exception with a specifiable message and inner exception.
class LogTableOverflowException : Exception
{
const string overflowMessage =
"The log table has overflowed.";
public LogTableOverflowException( ) :
base( overflowMessage )
{ }
public LogTableOverflowException( string auxMessage ) :
base( String.Format( "{0} - {1}",
overflowMessage, auxMessage ) )
{ }
public LogTableOverflowException(
string auxMessage, Exception inner ) :
base( String.Format( "{0} - {1}",
overflowMessage, auxMessage ), inner )
{ }
}
class LogTable
{
public LogTable( int numElements )
{
logArea = new string[ numElements ];
elemInUse = 0;
}
protected string[ ] logArea;
protected int elemInUse;
// The AddRecord method throws a derived exception
// if the array bounds exception is caught.
public int AddRecord( string newRecord )
{
try
{
logArea[ elemInUse ] = newRecord;
return elemInUse++;
}
catch( Exception ex )
{
throw new LogTableOverflowException(
String.Format( "Record \"{0}\" was not logged.",
newRecord ), ex );
}
}
}
class OverflowDemo
{
// Create a log table and force an overflow.
public static void Main()
{
LogTable log = new LogTable( 4 );
Console.WriteLine(
"This example of the Exception( string, Exception )" +
"\nconstructor generates the following output." );
Console.WriteLine(
"\nExample of a derived exception " +
"that references an inner exception:\n" );
try
{
for( int count = 1; ; count++ )
{
log.AddRecord(
String.Format(
"Log record number {0}", count ) );
}
}
catch( Exception ex )
{
Console.WriteLine( ex.ToString( ) );
}
}
}
}
/*
This example of the Exception( string, Exception )
constructor generates the following output.
Example of a derived exception that references an inner exception:
NDP_UE_CS.LogTableOverflowException: The log table has overflowed. - Record "Lo
g record number 5" was not logged. ---> System.IndexOutOfRangeException: Index
was outside the bounds of the array.
at NDP_UE_CS.LogTable.AddRecord(String newRecord)
--- End of inner exception stack trace ---
at NDP_UE_CS.LogTable.AddRecord(String newRecord)
at NDP_UE_CS.OverflowDemo.Main()
*/
// Example for the Exception(string, Exception) constructor.
open System
let overflowMessage = "The log table has overflowed."
// Derive an exception with a specifiable message and inner exception.
type LogTableOverflowException =
inherit Exception
new () = { inherit Exception(overflowMessage) }
new (auxMessage: string) =
{ inherit Exception($"{overflowMessage} - {auxMessage}") }
new (auxMessage: string, inner: Exception) =
{ inherit Exception($"{overflowMessage} - {auxMessage}", inner ) }
type LogTable(numElements: int) =
let mutable logArea = Array.zeroCreate<string> numElements
let mutable elemInUse = 0
// The AddRecord method throws a derived exception
// if the array bounds exception is caught.
member _.AddRecord(newRecord: string): int =
try
logArea[elemInUse] <- newRecord
elemInUse <- elemInUse + 1
elemInUse - 1
with ex ->
raise (LogTableOverflowException($"Record \"{newRecord}\" was not logged.", ex ) )
// Create a log table and force an overflow.
let log = LogTable 4
printfn "This example of the Exception(string, Exception)\nconstructor generates the following output."
printfn "\nExample of a derived exception that references an inner exception:\n"
try
for count = 1 to 1000 do
log.AddRecord $"Log record number {count}"
|> ignore
with ex ->
printfn $"{ex}"
// This example of the Exception(string, Exception)
// constructor generates the following output.
//
// Example of a derived exception that references an inner exception:
//
// NDP_UE_FS_4+LogTableOverflowException: The log table has overflowed. - Record "Lo
// g record number 5" was not logged. ---> System.IndexOutOfRangeException: Index
// was outside the bounds of the array.
// at NDP_UE_FS_4.LogTable.AddRecord(String newRecord)
// --- End of inner exception stack trace ---
// at NDP_UE_FS_4.LogTable.AddRecord(String newRecord)
// at <StartupCode$fs>.$NDP_UE_FS_4.main@()
' Sample for Exception( String, Exception ) constructor.
Namespace NDP_UE_VB
' Derive an exception with a specifiable message and inner exception.
Class LogTableOverflowException
Inherits Exception
Private Const overflowMessage As String = _
"The log table has overflowed."
Public Sub New( )
MyBase.New( overflowMessage )
End Sub
Public Sub New( auxMessage As String )
MyBase.New( String.Format( "{0} - {1}", _
overflowMessage, auxMessage ) )
End Sub
Public Sub New( auxMessage As String, inner As Exception )
MyBase.New( String.Format( "{0} - {1}", _
overflowMessage, auxMessage ), inner )
End Sub
End Class
Class LogTable
Public Sub New( numElements As Integer )
logArea = New String( numElements ) { }
elemInUse = 0
End Sub
Protected logArea( ) As String
Protected elemInUse As Integer
' The AddRecord method throws a derived exception
' if the array bounds exception is caught.
Public Function AddRecord( newRecord As String ) As Integer
Try
Dim curElement as Integer = elemInUse
logArea( elemInUse ) = newRecord
elemInUse += 1
Return curElement
Catch ex As Exception
Throw New LogTableOverflowException( String.Format( _
"Record ""{0}"" was not logged.", newRecord ), ex )
End Try
End Function ' AddRecord
End Class
Module OverflowDemo
' Create a log table and force an overflow.
Sub Main()
Dim log As New LogTable(4)
Console.WriteLine( _
"This example of the Exception( String, Exception )" & _
vbCrLf & "constructor generates the following output." )
Console.WriteLine( vbCrLf & _
"Example of a derived exception " & vbCrLf & _
"that references an inner exception:" & vbCrLf )
Try
Dim count As Integer = 0
Do
log.AddRecord( _
String.Format( _
"Log record number {0}", count ) )
count += 1
Loop
Catch ex As Exception
Console.WriteLine( ex.ToString( ) )
End Try
End Sub
End Module ' OverflowDemo
End Namespace ' NDP_UE_VB
' This example of the Exception( String, Exception )
' constructor generates the following output.
'
' Example of a derived exception
' that references an inner exception:
'
' NDP_UE_VB.LogTableOverflowException: The log table has overflowed. - Record "
' Log record number 5" was not logged. ---> System.IndexOutOfRangeException: In
' dex was outside the bounds of the array.
' at NDP_UE_VB.LogTable.AddRecord(String newRecord)
' --- End of inner exception stack trace ---
' at NDP_UE_VB.LogTable.AddRecord(String newRecord)
' at NDP_UE_VB.OverflowDemo.Main()
備註
因先前例外直接拋出的例外,應包含對該屬性中 InnerException 先前例外的參考。 該InnerException屬性會回傳與傳入建構子相同的值,或若該InnerException屬性未提供內建器內部例外值,則回傳 Visual Basic 中的空參考Nothing。
下表顯示了 的 Exception初始屬性值。
| 房產 | 價值 |
|---|---|
| InnerException | 內部例外的參考。 |
| Message | 錯誤訊息字串。 |