Поделиться через


ILGenerator.ThrowException Method

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Emits an instruction to throw an exception.

Namespace:  System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Overridable Sub ThrowException ( _
    excType As Type _
)
public virtual void ThrowException(
    Type excType
)

Parameters

  • excType
    Type: System.Type
    The class of the type of exception to throw.

Exceptions

Exception Condition
ArgumentException

excType is not the Exception class or a derived class of Exception.

-or-

The type does not have a default constructor.

ArgumentNullException

excType is nulla null reference (Nothing in Visual Basic).

Examples

The following example demonstrates the use of ThrowException to throw an exception with a default message. This code is part of a larger example provided for the BeginExceptionBlock method.

' Begin the try/catch/finally block. The label is used to leave the 
' block.
Dim exTryCatchFinally As Label = adderIL.BeginExceptionBlock()

' Load the first argument and the integer value 100 onto the execution
' stack, and test whether the argument is greater than 100. The result is
' now on the execution stack.
'
adderIL.Emit(OpCodes.Ldarg_0)
adderIL.Emit(OpCodes.Ldc_I4_S, 100)
adderIL.Emit(OpCodes.Cgt)

' Test whether the second argument is greater than 100. Both results are
' now on the execution stack.
'
adderIL.Emit(OpCodes.Ldarg_1)
adderIL.Emit(OpCodes.Ldc_I4_S, 100)
adderIL.Emit(OpCodes.Cgt)

' Perform a logical OR on the two results, and branch to the 'succeeded'
' label if the result is true.
adderIL.Emit(OpCodes.Or)
adderIL.Emit(OpCodes.Brfalse, succeeded)


' If one of the arguments was greater than 100, throw an OverflowException. 
adderIL.ThrowException(overflowType)

' This example uses the ThrowException method, which uses the default 
' constructor of the specified exception type to create the exception. If you
' want to specify your own message, you must use a different constructor; 
' replace the ThrowException method call with code like that shown below,
' which creates the exception and throws it.
'
' Load the message, which is the argument for the constructor, onto the 
' execution stack. Execute Newobj, with the OverflowException constructor
' that takes a string. This pops the message off the stack, and pushes the
' new exception onto the stack. The Throw instruction pops the exception off
' the stack and throws it.
'adderIL.Emit(OpCodes.Ldstr, "DoAdd does not accept values over 100.")
'adderIL.Emit(OpCodes.Newobj, _
'             overflowType.GetConstructor(New Type() { GetType(String) }))
'adderIL.Emit(OpCodes.Throw)


' If both arguments are less than or equal to 100, execution continues 
' here.
adderIL.MarkLabel(succeeded)
// Begin the try/catch/finally block. The label is used to leave the
// block.
Label exTryCatchFinally = adderIL.BeginExceptionBlock();

// Load the first argument and the integer value 100 onto the execution
// stack, and test whether the argument is greater than 100. The result is
// now on the execution stack.
//
adderIL.Emit(OpCodes.Ldarg_0);
adderIL.Emit(OpCodes.Ldc_I4_S, 100);
adderIL.Emit(OpCodes.Cgt);

// Test whether the second argument is greater than 100. Both results are
// now on the execution stack.
//
adderIL.Emit(OpCodes.Ldarg_1);
adderIL.Emit(OpCodes.Ldc_I4_S, 100);
adderIL.Emit(OpCodes.Cgt);

// Perform a logical OR on the two results, and branch to the 'succeeded'
// label if the result is true.
adderIL.Emit(OpCodes.Or);
adderIL.Emit(OpCodes.Brfalse, succeeded);


// If one of the arguments was greater than 100, throw an OverflowException. 
adderIL.ThrowException(overflowType);

// This example uses the ThrowException method, which uses the default 
// constructor of the specified exception type to create the exception. If you
// want to specify your own message, you must use a different constructor; 
// replace the ThrowException method call with code like that shown below,
// which creates the exception and throws it.
//
// Load the message, which is the argument for the constructor, onto the 
// execution stack. Execute Newobj, with the OverflowException constructor
// that takes a string. This pops the message off the stack, and pushes the
// new exception onto the stack. The Throw instruction pops the exception off
// the stack and throws it.
//adderIL.Emit(OpCodes.Ldstr, "DoAdd does not accept values over 100.");
//adderIL.Emit(OpCodes.Newobj, _
//             overflowType.GetConstructor(new Type[] { typeof(String) }));
//adderIL.Emit(OpCodes.Throw);


// If both arguments are less than or equal to 100, execution continues 
// here.
adderIL.MarkLabel(succeeded);

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.