扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:Microsoft 2007年11月10日
关键字:
到现在为止,您应该清楚地了解了结构化异常处理和非结构化异常处理之间的区别,以及 Visual Basic .NET 中结构化异常处理功能的优势。通常情况下,结构化异常处理即可满足您的需求,但在少数情况下仍然可能需要使用非结构化异常处理。
在确保异常得到处理的同时,不要过多地列举它们,否则会导致性能下降。Try 结构是很有条理的,易于编写且易于阅读,它能生成有效的代码。编写处理一个或多个可能异常的代码时,都应该使用该结构。此方法极其有效,您甚至愿意在正常情况下使用异常来控制逻辑流程。例如,替代 If 或 Select 语句。处理异常是很有效的,但应该到真正发生异常时使用。
下表列出了预定义的异常类及其起因和派生类。
表 1
异常类 | 产生原因 | 派生类 |
---|---|---|
AppDomainUnloadedException | 尝试访问未加载的应用程序域 | 无 |
ArgumentException | 为方法提供的一个或多个参数无效 | ArgumentNullException
ArgumentOutOfRangeException ComponentModel.InvalidEnum DuplicateWaitObjectException |
ArithmeticException | 在算法、强制类型转换或转换操作上发生错误 | DivideByZeroException
NotFiniteNumberException OverflowException |
ArrayTypeMismatchException | 尝试在数组中存储错误类型的元素 | 无 |
BadImageFormatException | DLL 或可执行程序的文件映像无效 | 无 |
CannotUnloadAppDomainException | 尝试卸载应用程序域失败 | 无 |
ComponentModel.Design.Serialization. CodeDomSerializerException |
产生序列化错误的行号信息 | 无 |
ComponentModel.LicenseException | 无法为组件授予许可证 | 无 |
ComponentModel.WarningException | 异常被作为警告而不是错误处理 | 无 |
Configuration.ConfigurationException | 配置设置中发生错误 | 无 |
Configuration.Install.InstallException | 在安装过程的提交、回滚或卸载阶段发生错误 | 无 |
ContextMarshalException | 尝试通过上下文范围封送对象失败 | 无 |
Data.DataException | 使用 ADO.NET 组件时产生错误 | Data.ConstraintException
Data.DeletedRowInaccessibleException Data.DuplicateNameException Data.InRowChangingEventException Data.InvalidConstraintException Data.InvalidExpressionException Data.MissingPrimaryKeyException Data.NoNullAlllowedException Data.ReadOnlyException Data.RowNotInTableException Data.StringTypingException Data.TypedDataSetGeneratorException Data.VersionNotFoundException |
Data.DBConcurrencyException | 在升级操作中,DataAdapter 确定受影响的行数等于零 | 无 |
Data.SqlClient.SqlException | SQL Server 返回警告或错误 | 无 |
Data.SqlTypes.SqlTypeException | Data.SqlTypes 的异常基类 | Data.SqlTypes.SqlNullValueException
Data.SqlTypes.SqlTruncateException |
Drawing.Printing. InvalidPrinterException |
使用无效的打印机设置尝试访问打印机 | 无 |
EnterpriseServices. RegistrationException |
检测到注册错误 | 无 |
EnterpriseServices.Serviced ComponentException |
在运行的组件上检测到错误 | 无 |
ExecutionEngineException | 在公共语言运行时的执行引擎上存在内部错误 | 无 |
FormatException | 参数的格式不符合调用方法的参数规定 | Net.CookieException
Reflection.CustomAttribute UriFormatException |
IndexOutofRangeException | 尝试访问其索引在数组范围之外的数组元素 | 无 |
InvalidCastException | 无效的强制类型转换或显式转换 | 无 |
InvalidOperationException | 方法调用对于对象的当前状态无效 | Net.ProtocolViolationException
Net.WebException ObjectDisposedException |
InvalidProgramException | 程序包含无效的 Microsoft 中间语言或元数据 | 无 |
IO.InternalBufferOverflowException | 内部缓冲区溢出 | 无 |
IO.IOException | 发生 I/O 错误 | IO.DirectoryNotFoundException
IO.EndOfStreamException IO.FileLoadException IO.FileNotFoundException IO.PathTooLongException |
Management.ManagementException | 管理错误 | 无 |
MemberAccessException | 尝试访问类成员失败 | FieldAccessException
MethodAccessException MissingFieldException MissingMemberException MissingMethodException |
MulticastNotSupportedException | 尝试组合两个无法组合的代理类型实例,两者的操作数都为非空引用 | 无 |
NotImplementedException | 未执行要求的方法或操作 | 无 |
NotSupportedException | 不支持所调用的方法,或者尝试在不支持所调用函数的流中进行读取、查找或写入 | PlatformNotSupportedException |
NullReferenceException | 尝试取消引用空对象引用 | 无 |
OutOfMemoryException | 内存不足以完成执行程序 | 无 |
RankException | 将具有错误维数的数组传递给方法 | 无 |
Reflection.AmbiguousMatch Exception |
绑定方法时导致多个方法符合绑定条件 | 无 |
Reflection.ReflectionType LoadException |
Module.GetTypes 方法导致模块中的一个或多个类无法加载 | 无 |
Resources.MissingManifest ResourceException |
主要程序集不包含非特定语言的资源,但它们又是必需的,因为缺少合适的辅助程序集 | 无 |
Runtime.InteropServices. ExternalException |
所有 COM 互操作异常和结构化异常处理异常的基本异常类型 | ComponentModel.Design. CheckoutException ComponentModel.Win32Exception Data.OleDb.OleDbException Messaging.MessageQueueException Runtime.InteropServices.COMException Runtime.InteropServices.SEHException Web.HttpException |
Runtime.InteropServices. InvalidComObjectException |
使用了无效的 COM 对象 | 无 |
Runtime.InteropServices. InvalidOleVariantTypeException |
封送器遇到无法封送到管理代码的变体类型参数 | 无 |
Runtime.InteropServices. MarshalDirectiveException |
封送器遇到不支持的 MarshalAsAttribute | 无 |
Runtime.InteropServices. SafeArrayRankMismatchException |
传入 SAFEARRAY 的名次与管理签名中指定的名次不匹配 | 无 |
Runtime.InteropServices. SafeArrayTypeMismatchException |
传入 SAFEARRAY 的类型与管理签名中指定的类型不匹配 | 无 |
Runtime.Remoting.RemotingException | 远程操作时发生错误 | Runtime.Remoting.Remoting TimeOutException |
Runtime.Remoting.ServerException | 用于在客户端连接到无法产生异常的非 .NET 框架应用程序时传递异常 | 无 |
Runtime.Serialization. SerializationException |
序列化或反序列化过程中发生错误 | 无 |
Security.Crytography. CryptographicException |
加密操作过程中发生错误 | Security.Cryptography. CryptographicUnexpected OperationException |
Security.Policy.PolicyException | 策略禁止代码运行 | 无 |
Security.SecurityException | 检测到安全性错误 | 无 |
Security.VerificationException | 安全策略要求代码的类型安全,而验证程序无法验证代码是否类型安全 | 无 |
Security.XmlSyntaxException | XML 分析时出现语法错误 | 无 |
ServiceProcess.TimeoutException | 指定的超时已过期 | 无 |
StackOverflowException | 待定的方法调用太多,导致执行堆栈溢出 | 无 |
Threading.SynchronizationLockException | 在代码的异步块中调用同步方法 | 无 |
Threading.ThreadAbortException | 调用 Abort 方法 | 无 |
Threading.ThreadInterruptedException | 在 WaitSleepJoin 状态时线程中断 | 无 |
Threading.ThreadStateException | 方法调用的无效 ThreadState 中的线程 | 无 |
TypeInitializationException | 围绕类初始化程序产生的异常而产生的包装 | 无 |
TypeLoadException | 类型加载失败 | DllNotFoundException
EntryPointNotFoundException |
TypeUnloadedException | 尝试访问已卸载的类 | 无 |
UnauthorizedAccessException | 操作系统拒绝访问,因为存在 I/O 错误或特定类型的安全性错误 | 无 |
Web.Services.Protocols.SoapException | 在 SOAP 上调用 XML Web 服务方法而导致错误 | Web.Services.Protocols. SoapHeaderException |
Xml.Schema.XmlSchemaException | 无 | |
Xml.XmlException | 无 | |
Xml.Xpath.XpathException | 处理 Xpath 表达式时发生错误 | 无 |
Xml.Xsl.XsltException | 处理可扩展样式表语言 (XSL) 转换时发生错误 | System.Xml.Xsl.XsltCompileException |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者