【发布时间】:2014-07-15 00:07:49
【问题描述】:
我只是想问你:我有一种方法可以用 3 个参数计算三角形面积 - 三角形的边。该方法的返回类型是 double。因此,如果每两条边的总和低于第三条边,我必须返回一个值。在错误情况下返回的最常规值是多少?我现在建议double.NaN 是最好的做法。
public static double CalculateTriangleArea(double firstSide, double secondSide, double thirdSide)
{
bool areSidesPositive = (firstSide <= 0) || (secondSide <= 0) || (thirdSide <= 0);
if (areSidesPositive)
{
double halfPerimeter = (firstSide + secondSide + thirdSide) / 2;
double area = Math.Sqrt(halfPerimeter * (halfPerimeter - firstSide) * (halfPerimeter - secondSide) * (halfPerimeter - thirdSide));
return area;
}
return double.NaN;
}
【问题讨论】:
-
如果这些参数无效,您可以抛出
ArgumentException。 -
+1 到参数异常。如果您的方法无法执行,则不应返回值,这就是 ArgumentException 的用途!
-
@TimSchmelter 我不同意参数异常,因为它增加了额外的开销,他可以使用带有布尔返回值的尝试
-
@K.B:取决于参数的无效程度以及这种情况发生的频率。你可以创建一个
TryCalculateTriangleArea,以bool作为返回值,以double作为out参数,所以TryParse-模式。 -
我知道这是正确的方法,但我没有提到你可以抛出异常而不返回任何值。现在我只是用 ArgumentException 替换了 return double.NaN 而没有收到编译错误。非常感谢。