处理错误字符串的最佳实践

时间:2009-08-14 12:51:37

标签: .net vb.net error-handling

在我的vb.net应用程序中,如果我有一组已知的错误字符串,即

  • 因为我不知道而失败
  • 失败,因为我知道但我找不到它
  • 因其他原因失败

我得到一个回复​​,我想确保其中没有错误字符串

If returnedString.equals("Failed because I don't know about it") then 
    'do something'
End if

人们如何最好地建议我远离硬编码错误字符串。

理想情况下,可以在此处使用枚举,但在比较返回的错误字符串时不起作用。 (如果我错了,请纠正我!)

这些最好是作为资源文件中的字符串保存,还是最好为每个错误字符串设置一个带有共享公共属性的ErrorClass并检查

If returnedErrorString.equals(ErrorClass.UnknownString) then 
        'do something'
End if

或者还有其他(更好的?)方法吗?

编辑:我认为在这种情况下不是最好的异常建议,因为返回的错误代码不一定会导致应用程序失败,但可能会改变程序流程,如同向用户显示的内容一样,我必须查看在错误字符串中,因为它们与我的控件一起出来并从外部应用程序返回

6 个答案:

答案 0 :(得分:4)

我想说首选的方法是不使用错误字符串,而是为不同的例外创建自定义异常类:

UnknownException
NotFoundException
OtherReasonException

然后你有一种类型安全的方法来确定错误原因,也与翻译文本和类似问题的问题脱节。

MSDN上有一篇关于how to create user-defined exceptions的文章。

答案 1 :(得分:2)

使用字符串来指示错误条件,无论它们是否是实际的例外情况,都是容易出错的。如果你必须这样做,那么在进行这样的字符串比较时要注意的一点是它们区分大小写,所以你应该使用String.Compare(string, string, StringComparison)而不是相等。

由于错误字符串来自外部应用程序(我认为这意味着您无法控制它们),因此最好的选择是将调用包装到该外部应用程序,以便您可以封装“错误处理” “(即字符串评估)并根据需要抛出异常或返回某种错误”代码“(通过枚举处理)。

如果错误条件本身不代表实际的异常情况,那么您最有可能使用它们来控制程序流,在这种情况下您不想抛出异常。请记住,抛出异常并不昂贵,抓住一个。否则,您应该考虑抛出异常,最好使用符合错误描述的现有.NET异常。如果找不到,则应创建自定义例外。

就资源字符串本身而言,将实际文本存储在资源文件中可能是最好的主意。这使您能够(稍后某点)能够更轻松地本地化文本,允许您单个存储位置,并提供强类型类来访问字符串。

答案 2 :(得分:2)

在我30多年的经验中,查看错误字符串以编程方式确定出错是一直是错误的。如果标点符号发生变化怎么办?

我同意使用自定义异常的建议,但我只会创建一个自定义异常。我会定义枚举的原因是:

public enum ExceptionReason {
    Unknown,
    NotFound
}

我会为您的自定义异常提供此枚举类型的属性。

对于“其他内容”的情况,只需抛出现有的Exception类。事实上,你会想通过异常找出“别的东西”,在这种情况下,不要抓住它 - 只是让它消失。

答案 3 :(得分:1)

您可以使用资源来存储字符串。

您可以根据您的分类命名这些资源文件:

IOErrors.resx

DBErrors.resx

FormatErrors.resx

然后,您可以在项目中简单而优雅地引用它们,例如:

Resources.FormatErrors.WrongDateFormat

答案 4 :(得分:0)

我会使用枚举的错误代码列表。依赖字符串比较很容易出现陷阱(例如区分大小写,多语言问题等)。

我准备发布一个例子enum(几乎与@John发布的一样),但他的例子似乎已经足够了。

答案 5 :(得分:0)

我同意上述注释 - 但是,如果必须进行比较,则为该字符串创建一个命名常量,并与常量进行比较。这样,如果您更改错误字符串,则代码不会中断。