按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
generate an exception separate from any existing state that could be corrupted。 Once the manipulations have
been carried out; you integrate the objects into the global state using method calls that are extremely unlikely
to generate exceptions。 For those situations when you must manipulate existing state; use a Finally handler;
so that the previous existing state can be re…created if necessary。
Filtering Exceptions
In all of the examples presented so far in this chapter; the Catch statement used the Exception type:
Catch exception1 As Exception
Exception will catch every exception。
…………………………………………………………Page 149……………………………………………………………
CH AP T E R 5 ■ L E AR N IN G AB O U T V I SU A L B AS IC E X CE PT I ON HA N D L IN G 127
In Figure 5…3; the IDE caught an exception; referencing NullReferenceException; which is
a specific type of exception。 When you use it in a Catch statement; you will catch only null refer
ence exceptions。
By specializing the exception; you have the ability to filter which exception you want to
catch。 For example; NotSupportedException will catch only instances of NotSupportedException
exceptions。 Here is an example:
Try
Throw New NotSupportedException(〃There is no code〃)
Catch ex As NotSupportedException
End Try
If the code within the Try block threw an instance of Exception; the Catch block would not
trigger; because the Catch block was looking for a specific exception type。
Exception types can be bined to provide specific filtering capabilities。 The specific
exception type should be the first exception after the Try block; as in this example:
Try
' 。 。 。
Catch ex1 As NotSupportedException
'
Catch ex2 As Exception
'
End Try
By bining multiple exception filters; you don’t need to figure out which kind of excep
tion is being thrown。 For example; without the filtering capabilities of a Catch block to catch
NotSupportedException exception types; you would need to write this code:
Try
Throw New NotSupportedException(〃There is no code〃)
Catch ex As Exception
If ex Is NotSupportedException Then
'。 。 。
Else
Throw ex
End If
End Try
Table 5…1 lists mon exception types in the System namespace that you can throw or
can be thrown。 There are many more exceptions; and you can even generate your own excep
tions by subclassing Exception。
…………………………………………………………Page 150……………………………………………………………
128 CH AP T E R 5 ■ L E A R N IN G AB OU T V I SU A L B AS IC E X C E P TI ON H AN D L IN G
Table 5…1。 mon Exception Types
Exception Description
Exception Plain…vanilla exception; a general container for all exceptions。
When you get one of these exceptions; look at the Message
property for the exact details。 If you throw this type of excep
tion; it is important to supply an easy…to…understand string to
the exception constructor。
ArgumentException Thrown if you call a method and one of the arguments is not
valid。 Typically; in the Message property you can find the
problem with the arguments。 If this exception is thrown; it is
because the contents of the argument are wrong。
ArgumentNullException Thrown if you call a method where one of the arguments is
a Nothing value。 This could be because you are passing the
Nothing value to the method or one of the arguments has a
Nothing value。
ArgumentOutOfRangeException Thrown if you call a method where one of the arguments is
not in the expected range。 While this exception sounds similar
to ArgumentException; it is more specialized and targets
whether an argument is in an acceptable range。 Check the
documentation of the method or the method implementation
on what the acceptable range is。 If you throw this exception;
note the valid range in the error message。
ArithmeticException Thrown if a mathematical error is generated。
DivideByZeroException Thrown if you attempt to divide by zero。
FormatException Thrown if the format of the parameter is not correct。 For
example; if a method expects a number to be formatted with
a period and you use a ma; an exception is generated。
IndexOutOfRangeException Thrown if you attempt to reference an index of an array that
would be beyond the limits of the array。 This exception is
thrown if you have not allocated an array an