因为我正在编写我的第一个MVVM应用程序,而且我从来没有这样写过" big"应用。我不知道如何正常完成用户的错误处理。
我找到了一些"指南": http://codebuild.blogspot.co.at/2012/01/15-best-practices-about-exception.html
首先提到:"不要管理具有例外的业务逻辑。改为使用条件语句。如果可以使用if-else语句清楚地完成控件,则不要使用异常,因为它会降低可读性和性能(例如,空值控制,除以零控制)。"
那么最好使用if-else语句?或者你好吗?或者最好只使用try-catch语句?
后来当我有更多的if-else代码声明时,其他...更好地使用基本错误bool和错误字符串来代码?刚发生这种情况时,只需将此bool转换为true状态并将消息写入错误字符串?然后通过显示结果检查是否发生任何错误?
如果您不明白这个问题,请询问,或者说如何处理用户代码中的错误?
欢迎任何一般指南:)
答案 0 :(得分:1)
如上所述,异常会降低性能(不确定可读性,我个人从未遇到过问题)。如果您比较使用 IF 语句或使用 TRY-CATCH 检查某些内容所需的时间,您会发现第一个支持的巨大差异。
我会说在任何地方使用 IF 语句,您可以自己检查有效性 - 如果失败,在else语句中您可以指定需要完成的操作(向用户显示消息等)。例如,当划分x / y
时 private static void IfMethod()
{
int x = 10;
int y = 0;
if (y != 0)
{
Console.WriteLine(x / y);
}
else
{
Console.WriteLine("y is 0");
}
}
Try-catch 更适用于无法预测所有内容的情况。例如,如果您尝试读取/写入文件,则永远不会100%知道您是否可以访问该特定文件,文件系统或文件实际存在。如果您正在为其他人编写应用程序,则尤其如此。您无法知道他们如何配置他们的PC,访问权限等。
希望这有帮助。
答案 1 :(得分:1)
不要用例外来管理业务逻辑。使用条件 而是声明。如果可以使用if-else语句完成控件 显然,不要使用例外,因为它会降低可读性 性能
真。但是,让我们澄清,这里的含义是什么 这是一个示例,当逻辑构建在异常上时:
private int? Foo(int a)
{
try
{
// bar is some int field
return bar / a;
}
catch (DivideByZeroException)
{
return null;
}
}
此处,方法Foo
需要,a
可以为0.因此,a == 0
不是例外。但是,而不是这个:
private int? Foo(int a)
{
if (a == 0)
return null;
return bar / a;
}
此方法的逻辑使用异常来检测,该方法的结果未确定,并返回特殊值(null
)。
另一方面,这是一个例子,当你必须使用例外时:
public int Foo(int a)
{
if (a == 0)
throw new ArgumentOutOfRangeException("a can't be 0!");
return bar / a;
}
此版本的Foo
是类库中的公共方法。在Foo
时,a == 0
的逻辑无法处理此案例。因此,它必须检查输入参数,并抛出异常。
重新引用上面的引文: