根据我的程序员经验,我混合使用了所有可能的错误处理方式……我创造了我的个人风格。
但是,我想听听您认为错误处理在方法开始与结束时的优缺点。
开头的处理:
public String GenerateSomeStringData(String data, int value)
{
if (data == null)
throw new ArgumentNullException("data");
if (value <= 0)
throw new ArgumentException("value must be greater than zero");
int dataValue;
if (!int.TryParse(data, out dataValue))
throw new InvalidOperationException("data does not contain an integer");
return dataValue * 4 + value / 12;
}
末尾处理:(同例)
public String GenerateSomeStringData(String data, int value)
{
if (data != null)
{
if (value > 0)
{
int dataValue;
if (int.TryParse(data, out dataValue))
{
return dataValue * 4 + value / 12;
}
else
throw new InvalidOperationException("data does not contain an integer");
}
else
throw new ArgumentException("value must be greater than zero");
}
else
throw new ArgumentNullException("data");
}
在决定如何处理这个问题时,您使用什么标准?可读性、可维护性、简洁性?
最佳答案
输入的有效性应该是 precondition执行该方法 - 因此,我会(并且会)始终首先进行错误处理。
这样做有以下优点:
人类更容易解析: 首先验证先决条件,然后 执行逻辑(通常 结果在一些后置条件下)
明确分离关注点 错误处理和执行逻辑
在您的方法中:验证逻辑未“散布”在执行逻辑中
如评论中所述,您必须区分违反前提条件并触发错误条件(例如抛出异常)的无效输入和构成边缘条件的有效输入(即需要一些要处理的特殊逻辑)。后一种情况我会在断言前提条件后,在您的方法的执行逻辑开始时单独处理。
关于c# - 在方法开始和结束时进行错误处理的优缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6600355/