.NET中使用try-catch做流控“不好”吗?刚刚在一个项目中发现:try{myLabel.Text=school.SchoolName;}catch{myPanel.Visible=false;我想和开发人员谈谈,而不是写这个,说发生了nullexception(因为school理论上可以为null,而不是myLabel)实际上会使计算机发出三声蜂鸣声并休眠两秒钟。但是,我想知道我是否缺少关于此的规则。显然这不是try/catch的预期用途,但它是因为忽略了意图而不利于性能考虑吗?我认为这很糟糕,但我想说的不仅仅是“那真的很糟糕”。您不应该仅仅因为糟糕的设计就将异常用于控制流。这没有意义。例外是针对特殊情况,而不是正常流量。在这种情况下,性能可能不会成为问题,因为对于现代硬件上的大多数现代应用程序,您可以整天抛出异常,而用户不会注意到性能受到影响。但是,如果这是一个处理大量数据或做大量工作的高性能应用程序,那么是的,性能将是一个问题。在我看来,这很糟糕,因为if语句可以更清楚:if(school!=null){myLabel.Text=school.SchoolName;}else{myPanel.Visible=false;}这当然会避免不必要的异常处理的使用,并使代码的含义非常明显。我认为这很糟糕,因为它针对异常进行编码并且还继承了不必要的开销。只有在以特定方式处理异常时才应捕获异常。应该专门针对您无法预测的异常捕获异常,在这种情况下,这是一个简单的检查,看看school是否可以为null,而实际上预计school可以为null(因为未设置标签).如果school为null而它不应该为null,则它应该抛出自己的ArgumentNullException。你是对的,这不好。这很糟糕,因为它无视意图并且会损害性能。我意识到不同的编程风格有空间,但我个人认为,虽然这可行,但我可以看到代码试图做什么,但它也会损害可读性和代码清晰度,使程序员更难进行维护。if语句在这里更合适。抛出异常会对性能产生负面影响,请参阅http://msdn.microsoft.com/en-us/library/ms229009(VS.80).aspx异常会导致运行时开销,但这在这里可能可以忽略不计。在调试器中运行会有所不同,但构建的二进制文件应该以几乎相同的速度运行。告诉您的开发人员,任何黑猩猩都可以编写机器可以读取的代码。好的代码是为人类而不是机器编写的。如果您唯一担心的是nullexceptions,那么它可能是用户代码中的错误-任何人都不应该尝试以任何方式分配null。请改用Assert()语句。我从不喜欢使用异常来进行流量控制。异常是昂贵的,并且很难确定带有异常的程序的实际流程以便到达代码中的其他地方。对我来说,这就像使用GoTo。这并不意味着您应该避免异常,而只是异常,即通常应该在您的程序中发生的异常。我认为代码中最糟糕的部分之一是它甚至没有做任何异常的事情。它没有记录,甚至没有解释为什么抛出异常。查看这篇文章“为什么不将异常用作正常控制流?”我同意这里的每个人——这是一个可怕的想法。在Java中有一些情况(我认为它们现在大部分都消失了,但在外部库中可能仍然存在一些)您需要为某些“非异常”情况捕获异常。通常,在编写库代码(实际上是任何类)时,避免任何可能可以避免的异常。如果名称字段可能未被设置并且应该在write()方法中导致异常,请确保添加一个isValid()方法,这样您实际上就不会捕获围绕写入的异常,因为知道有一个问题在这里。(糟糕的Java代码附录):这种“良好”的编程风格实际上消除了Java中对检查异常的任何需求,而Java中的检查异常很糟糕。以上就是C#学习教程:在.NET中使用try-catch做流控“不好”吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
