OverflowException 类

定义

在选中的上下文中所进行的算术运算、类型转换或转换操作导致溢出时引发的异常。The exception that is thrown when an arithmetic, casting, or conversion operation in a checked context results in an overflow.

public ref class OverflowException : ArithmeticException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class OverflowException : ArithmeticException
type OverflowException = class
    inherit ArithmeticException
Public Class OverflowException
Inherits ArithmeticException
继承
属性

注解

OverflowException在运行时, 在以下条件下引发:An OverflowException is thrown at run time under the following conditions:

  • 算术运算生成的结果超出了该操作所返回的数据类型的范围。An arithmetic operation produces a result that is outside the range of the data type returned by the operation. 下面的示例演示了OverflowException溢出Int32类型边界的乘法运算所引发的。The following example illustrates the OverflowException that is thrown by a multiplication operation that overflows the bounds of the Int32 type.

    int value = 780000000;
    checked {
    try {
       // Square the original value.
       int square = value * value; 
       Console.WriteLine("{0} ^ 2 = {1}", value, square);
    }
    catch (OverflowException) {
       double square = Math.Pow(value, 2);
       Console.WriteLine("Exception: {0} > {1:E}.", 
                         square, Int32.MaxValue);
    } }
    // The example displays the following output:
    //       Exception: 6.084E+17 > 2.147484E+009.
    
    Dim value As Integer = 780000000
    Try
       ' Square the original value.
       Dim square As Integer = value * value 
       Console.WriteLine("{0} ^ 2 = {1}", value, square)
    Catch e As OverflowException
       Dim square As Double = Math.Pow(value, 2)
       Console.WriteLine("Exception: {0} > {1:E}.", _
                         square, Int32.MaxValue)
    End Try
    ' The example displays the following output:
    '       Exception: 6.084E+17 > 2.147484E+009.
    
  • 强制转换或转换操作尝试执行收缩转换, 并且源数据类型的值超出了目标数据类型的范围。A casting or conversion operation attempts to perform a narrowing conversion, and the value of the source data type is outside the range of the target data type. 下面的示例演示OverflowException尝试将大的无符号字节值转换为有符号字节值时所引发的。The following example illustrates the OverflowException that is thrown by the attempt to convert a large unsigned byte value to a signed byte value.

    byte value = 241;
    checked {
    try {
       sbyte newValue = (sbyte) value;
       Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", 
                         value.GetType().Name, value, 
                         newValue.GetType().Name, newValue);
    }
    catch (OverflowException) {
       Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue);
    } }                            
    // The example displays the following output:
    //       Exception: 241 > 127.
    
    Dim value As Byte = 241
    Try
       Dim newValue As SByte = (CSByte(value))
       Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                         value.GetType().Name, value, _
                         newValue.GetType().Name, newValue)
    Catch e As OverflowException
       Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue)
    End Try                            
    ' The example displays the following output:
    '       Exception: 241 > 127.
    

在每种情况下, 操作的结果是小于MinValue属性的值, 或大于MaxValue操作生成的数据类型的属性。In each case, the result of the operation is a value that is less than the MinValue property or greater than the MaxValue property of the data type that results from the operation.

要使算术、强制转换或转换操作引发OverflowException, 操作必须在已检查的上下文中发生。For the arithmetic, casting, or conversion operation to throw an OverflowException, the operation must occur in a checked context. 默认情况下, 将检查 Visual Basic 中的算术运算和溢出;在C#中, 它们不是。By default, arithmetic operations and overflows in Visual Basic are checked; in C#, they are not. 如果操作发生在未检查的上下文中, 则将放弃不适合目标类型的任何高序位, 从而截断结果。If the operation occurs in an unchecked context, the result is truncated by discarding any high-order bits that do not fit into the destination type. 下面的示例演示了中C#的此类未检查转换。The following example illustrates such an unchecked conversion in C#. 它在未检查的上下文中重复前面的示例。It repeats the previous example in an unchecked context.

byte value = 241;
try {
   sbyte newValue = (sbyte) value;
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", 
                     value.GetType().Name, value, 
                     newValue.GetType().Name, newValue);
}
catch (OverflowException) {
   Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue);
}
// The example displays the following output:
//       Converted the Byte value 241 to the SByte value -15.

以下 Microsoft 中间语言 (MSIL) 指令引发OverflowException:The following Microsoft intermediate language (MSIL) instructions throw an OverflowException:

  • add.ovf.签名<>add.ovf. <signed>

  • conv.ovf.键入<>conv.ovf. <to type>

  • conv.ovf.键入<>.unconv.ovf. <to type> .un

  • mul.ovf. <type>mul.ovf. <type>

  • sub.ovf. <type>sub.ovf. <type>

  • newarr

OverflowException使用 COR_E_OVERFLOW 值为0x80131516 的 HRESULT。OverflowException uses the HRESULT COR_E_OVERFLOW, which has the value 0x80131516.

有关实例的初始属性值的列表OverflowException,请参阅OverflowException构造函数。For a list of initial property values for an instance of OverflowException, see the OverflowException constructors.

构造函数

OverflowException()

初始化 OverflowException 类的新实例。Initializes a new instance of the OverflowException class.

OverflowException(SerializationInfo, StreamingContext)

用序列化数据初始化 OverflowException 类的新实例。Initializes a new instance of the OverflowException class with serialized data.

OverflowException(String)

用指定的错误消息初始化 OverflowException 类的新实例。Initializes a new instance of the OverflowException class with a specified error message.

OverflowException(String, Exception)

使用指定的错误消息和对作为此异常原因的内部异常的引用来初始化 OverflowException 类的新实例。Initializes a new instance of the OverflowException class with a specified error message and a reference to the inner exception that is the cause of this exception.

属性

Data

获取提供有关异常的其他用户定义信息的键/值对集合。Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(继承自 Exception)
HelpLink

获取或设置指向与此异常关联的帮助文件链接。Gets or sets a link to the help file associated with this exception.

(继承自 Exception)
HResult

获取或设置 HRESULT(一个分配给特定异常的编码数字值)。Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(继承自 Exception)
InnerException

获取导致当前异常的 Exception 实例。Gets the Exception instance that caused the current exception.

(继承自 Exception)
Message

获取描述当前异常的消息。Gets a message that describes the current exception.

(继承自 Exception)
Source

获取或设置导致错误的应用程序或对象的名称。Gets or sets the name of the application or the object that causes the error.

(继承自 Exception)
StackTrace

获取调用堆栈上的即时框架字符串表示形式。Gets a string representation of the immediate frames on the call stack.

(继承自 Exception)
TargetSite

获取引发当前异常的方法。Gets the method that throws the current exception.

(继承自 Exception)

方法

Equals(Object)

确定指定的对象是否等于当前对象。Determines whether the specified object is equal to the current object.

(继承自 Object)
GetBaseException()

当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根源。When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(继承自 Exception)
GetHashCode()

作为默认哈希函数。Serves as the default hash function.

(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext)

当在派生类中重写时,用关于异常的信息设置 SerializationInfoWhen overridden in a derived class, sets the SerializationInfo with information about the exception.

(继承自 Exception)
GetType()

获取当前实例的运行时类型。Gets the runtime type of the current instance.

(继承自 Exception)
MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(继承自 Object)
ToString()

创建并返回当前异常的字符串表示形式。Creates and returns a string representation of the current exception.

(继承自 Exception)

事件

SerializeObjectState

当异常被序列化用来创建包含有关该异常的徐列出数据的异常状态对象时会出现该问题。Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(继承自 Exception)

适用于

另请参阅