在Visual Basic .NET中,可以创建自定义异常类型,以便更明确地指示应用程序中出现的特定错误。为此,需要从System.Exception(或其子类之一)继承新类,并根据需要添加新属性以传递额外信息。
自定义异常使代码更加可读和可维护,特别是当您需要针对特定业务场景进行特定处理时。
示例:
Public Class InvalidUserNameException Inherits ApplicationException Public Sub New(message As String) MyBase.New(message) End Sub End Class ' 使用: Sub ValidateUserName(userName As String) If userName = "" Then Throw New InvalidUserNameException("用户名不能为空") End If End Sub
问题: "可以通过Throw "错误"在Visual Basic中抛出字符串,并且它会被Try...Catch处理吗?"
回答: 不,不能这样做。Throw语句要求Exception类型的对象。尝试抛出字符串(Throw "err")会导致编译错误。始终需要创建异常类或其子类的新实例。
错误代码示例:
' 这将导致错误! Throw "错误!"
正确代码示例:
Throw New Exception("错误!")
故事:
在一个大型项目中,一位开发人员通过
Throw "不正确的数据!"抛出异常。这导致在生产环境中出现编译错误,因为代码没有通过静态检查。缺乏正确的异常处理使得发布延迟了一周——不得不寻找并重写代码中所有使用字符串的throw情况。
故事:
团队创建了自定义异常,但未添加带有InnerException参数的构造函数。在诊断复杂错误时,调用栈丢失了,因为无法“嵌套”原始异常。结果很难找到故障的最初原因。
故事:
在媒体应用程序中,自定义异常被使用得过于频繁且不当(例如,在每次数据输入不正确时)。结果系统性能下降——因为生成异常在操作上是昂贵的。在审核后,这些异常中的一部分被替换为普通条件检查。