返回的最常见价值是多少?

时间:2014-05-26 08:56:55

标签: c# double area

我只想问你:我有一个方法可以计算一个带有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;
 }

6 个答案:

答案 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)。

其他可能的方法是抛出异常(ArugmentExceptionArgumentOutOfRangeExceptionYourOwnException?等等,以便在参数错误的情况下明确地破坏程序流。尽管有开销,但在具有彼此相关的多个操作的情况下,它可能是优选的方式。 If更快,但如果你真的不关心究竟是什么错误,只是想要打破流量,那么推广错误(显示"Something is wrong"消息)可能会更好。