在我的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
或者还有其他(更好的?)方法吗?
编辑:我认为在这种情况下不是最好的异常建议,因为返回的错误代码不一定会导致应用程序失败,但可能会改变程序流程,如同向用户显示的内容一样,我必须查看在错误字符串中,因为它们与我的控件一起出来并从外部应用程序返回
答案 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)
我同意上述注释 - 但是,如果必须进行比较,则为该字符串创建一个命名常量,并与常量进行比较。这样,如果您更改错误字符串,则代码不会中断。