在C#中如何在它发生之前处理无效的参数类型异常?

时间:2011-10-25 12:29:14

标签: c#

在C#中如何处理无效的参数类型异常

 static class calc
 {
    public static double subtract(double num1, double num2)
    {
        // I want to handle arguments exception here so whenever a nethod is called I can handle the exception

        return num1 - num2;
    }
  }

如果用户使用错误的参数'type。

,我想处理异常

5 个答案:

答案 0 :(得分:4)

对于您的示例,参数怎么可能无效?由于您说明了类型,因此值不能无效。

我能想到的唯一情况是(num1 - num2) < Double.MinValue在这种情况下会导致错误。

答案 1 :(得分:1)

在调用方法之前,验证传递的参数实际上是否为有效类型。

或者,使用try捕获异常并捕获调用。

    try 
    {
         //Call Method
         subtract(1.0,2.0);
    }
    catch (Exception ex)
    {
       throw new FaultException(ex.Message);
       // Or display a message box.  
    }

答案 2 :(得分:0)

我能看到这种方法失败的唯一方法是:

1)您通过反射调用此方法,但参数错误。这不会是一个争论异常,因为问题将是“在呼叫之外”。

2)您使用double - double!= double这样的参数调用该函数。如果用户使用错误的参数'type ,这不会是例外 。为此,您可以针对double.Min

检查您的参数
static class calc
{
    public static double subtract(double num1, double num2)
    {
        double doubleAmountLeft = double.MaxValue - num1;
        if (num2 > num1)
        {
            throw new ArgumentOutOfRangeException("num2 > double.MaxValue - num1.");
        }

        return num1 - num2;
    }
}

答案 3 :(得分:0)

你的意思是,例如,这个吗?

 static class calc
 {
    public static double subtract(double num1, double num2)
    {
        if (num1<num2) throw new ArgumentException("num1 < num2", "num2");
        return num1 - num2;
    }
  }

答案 4 :(得分:0)

你甚至无法将其编译为接受不是双倍的东西或者可以转换为double的东西。但是,由于编译可能发生在执行附近(例如,当调用代码在.aspx文件中时),这个有时候有一点意义。在这种情况下,还可以方便地使用一个接受object参数的表单,以便不必在页面上进行DataBinder.Eval结果的转换:

static class Calc
{
  public static double Subtract(double num1, double num2)
  {
     return num1 - num2; //always correct type
  }
  public static double Substract(object num1, object num2)
  {
     try
     {
        return Subtract((double)num1, (double)num2);
        //alternatively allowing looser matching:
        //return Subtract(Convert.ToDouble(num1) - Convert.ToDouble(num2));
     }
     catch
     {
        throw new Exception("My Custom Exception Text");
     }
  }
}
但是,坦率地说,如果我从.aspx中的动态编译代码中传递错误的类型,我发现这比默认行为更令人困惑,因为我比你更了解常见的异常。