我只想问你:我有一个方法可以计算一个带有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;
}
答案 0 :(得分:1)
您可以使用:
return default(double);
答案 1 :(得分:1)
你可以使用double值在你的情况下返回:
return default(double);
同样如Tim所建议的,如果它是无效的参数,最好抛出ArgumentException
。
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;
}
throw new ArgumentException("Argument not correct",
firstSide,secondSide, thirdSide);
}
答案 2 :(得分:1)
一个建议的答案可能是
public static bool TryCalculateTriangleArea(double firstSide, double secondSide, double thirdSide,out double rArea)
{
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));
rArea= area;
return true ;
}
return false
}
答案 3 :(得分:1)
您的代码错误,您应该if (!areSidesPositive)
而不是if (areSidesPositive)
...即使参数设置良好,您的代码也永远无法执行。
是的,抛出一个ArgumentException,这是继续进行的最佳方式。
答案 4 :(得分:0)
通过比另外两个组合传递更长的一方,你违反了函数的(隐含)前提条件,所以我建议抛出一个ArgumentException
而不是返回一个值。
答案 5 :(得分:0)
在您的具体情况下,无需做任何事情:
public static double CalculateTriangleArea(double firstSide, double secondSide, double thirdSide)
{
double halfPerimeter = (firstSide + secondSide + thirdSide) / 2;
return Math.Sqrt(halfPerimeter * (halfPerimeter - firstSide) * (halfPerimeter - secondSide) * (halfPerimeter - thirdSide));
}
如果参数错误,则Math.Sqrt
将返回NaN
/ +Infinity
(它是免于异常的方法)。在使用之前,您必须检查返回值(如果是NaN
或+Infinity
)。
其他可能的方法是抛出异常(ArugmentException
?ArgumentOutOfRangeException
?YourOwnException
?等等,以便在参数错误的情况下明确地破坏程序流。尽管有开销,但在具有彼此相关的多个操作的情况下,它可能是优选的方式。 If
更快,但如果你真的不关心究竟是什么错误,只是想要打破流量,那么推广错误(显示"Something is wrong"
消息)可能会更好。