在保持我同事的代码甚至是自称是高级开发人员的人的同时,我经常看到以下代码:
try
{
//do something
}
catch
{
//Do nothing
}
Run Code Online (Sandbox Code Playgroud)
或者有时他们将日志信息写入日志文件,如下面的try catch块
try
{
//do some work
}
catch(Exception exception)
{
WriteException2LogFile(exception);
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道他们所做的是最佳做法吗?这让我感到困惑,因为在我看来,用户应该知道系统会发生什么.
请给我一些建议.
我的问题是大多数开发人员更喜欢错误处理,异常或错误返回代码.请具体说明语言(或语言家族)以及为什么您喜欢其中一种语言.
我出于好奇而问这个问题.我个人更喜欢错误返回代码,因为它们不那么具有爆炸性,并且如果不想要,也不会强制用户代码支付异常性能损失.
更新:感谢所有答案!我必须说,虽然我不喜欢代码流与异常的不可预测性.关于返回代码(以及他们的哥哥句柄)的答案会给代码添加大量的噪音.
我不知道是否有这个"模式",其中一个方法签名被称为TrySomething,如姓名int.TryParse,decimal.TryParse等等.
我的一个同事经常使用这个命名约定 - 而不是返回值或抛出异常,他们将调用一个方法TryDoSomething,如果在处理期间捕获异常,它将通过out param返回.
编辑:我理解私有的例子不是TryParse方法的工作原理.这就是张贴这个......我不知道该怎么称呼它.我同意它似乎更像是命名约定而不是模式.感谢所有的投入.
编辑:有趣 ......
考虑可能在常见场景中抛出异常的成员的TryParse模式,以避免与异常相关的性能问题.
要实现TryParse模式,您需要提供两种不同的方法来执行可在常见方案中引发异常的操作.第一个方法X执行操作并在适当时抛出异常.第二种方法TryX不会抛出异常,而是返回一个表示成功或失败的布尔值.使用out(Visual Basic中的ByRef)参数返回成功调用TryX返回的任何数据.Parse和TryParse方法就是这种模式的例子.
目前,我的代码是这样的,但是我想知道是否有一种方法可以简化它。我正在寻找的是字符串“ JLPT N1”,“ JLPT N2”,“ JLPT N3”,“ JLPT N4”,“ JLPT N5”之一,然后当我看到其中一个时,我将设置a的值。phraseSources[seq].JishoJlpt。
请注意,以上内容只能一次出现。
if (nodes2[0].InnerText.Contains("JLPT N5"))
{
phraseSources[seq].JishoJlpt = "5";
}
if (nodes2[0].InnerText.Contains("JLPT N4"))
{
phraseSources[seq].JishoJlpt = "4";
}
if (nodes2[0].InnerText.Contains("JLPT N3"))
{
phraseSources[seq].JishoJlpt = "3";
}
if (nodes2[0].InnerText.Contains("JLPT N2"))
{
phraseSources[seq].JishoJlpt = "2";
}
if (nodes2[0].InnerText.Contains("JLPT N1"))
{
phraseSources[seq].JishoJlpt = "1";
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以建议我可以简化这一点,将不胜感激。