Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,如何在无效参数类型异常发生之前处理它?_C# - Fatal编程技术网

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

在C#中,如何在无效参数类型异常发生之前处理它?,c#,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 - nu

在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;
    }
  }

如果用户使用了错误的参数类型,我想处理异常。

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


我能想到的唯一情况是,如果
(num1-num2)
,在这种情况下会导致错误。

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


我能想到的唯一情况是,如果
(num1-num2)
,在这种情况下,这将导致错误。

在调用该方法之前,请验证您传递的参数实际上是有效的类型

或者,在调用中使用try-and-Catch捕获异常

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

在调用该方法之前,请验证所传递的参数实际上是有效类型

或者,在调用中使用try-and-Catch捕获异常

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

我认为这种方法失败的唯一方法是:

1) 通过反射调用此方法,但参数不正确。这不会是参数异常,因为问题将“在调用之外”

2) 您使用以下参数调用函数:
double
-
double
!=<代码>双精度
。但是,如果用户使用了错误的参数类型,这也不是例外。为此,您可以对照
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;
    }
}

我认为这种方法失败的唯一方法是:

1) 通过反射调用此方法,但参数不正确。这不会是参数异常,因为问题将“在调用之外”

2) 您使用以下参数调用函数:
double
-
double
!=<代码>双精度
。但是,如果用户使用了错误的参数类型,这也不是例外。为此,您可以对照
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;
    }
}

你是说,比如说,这个

 static class calc
 {
    public static double subtract(double num1, double num2)
    {
        if (num1<num2) throw new ArgumentException("num1 < num2", "num2");
        return num1 - num2;
    }
  }
静态类计算
{
公共静态双减法(双num1,双num2)
{

如果(num1你的意思是,例如,这个吗

 static class calc
 {
    public static double subtract(double num1, double num2)
    {
        if (num1<num2) throw new ArgumentException("num1 < num2", "num2");
        return num1 - num2;
    }
  }
静态类计算
{
公共静态双减法(双num1,双num2)
{

if(num1您甚至不能将其编译为接受不是double或可以转换为double的内容。但是,因为编译可能发生在接近执行时(例如,当调用代码位于.aspx文件中时),这有时有点道理。在这种情况下,也可以方便地使用接受
对象
参数的表单,这样就不必在第页执行带有
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这样的即时编译代码中传递错误的类型,我会发现这比默认行为更令人困惑,因为我比您更了解常见的异常。

您甚至不能将其编译为接受非双精度或可转换为双精度的内容。然而,因为编译可能发生在很近的距离对于执行(例如,当调用代码位于.aspx文件中时),有时会有一点类似于此。在这种情况下,也可以方便地使用一个接受
对象
参数的表单,这样就不必在第页上执行对
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这样的即时编译代码中传递错误的类型,我会发现这比默认行为更令人困惑,因为我比你更了解常见的异常。

如果参数不是双精度的或隐式转换为双精度的,编译器将不接受编译。或者我误解了你吗?这取决于Steve这是真的,但是我想要的是为我的类创建我的个人异常,所以当有人访问我的类时,他将收到我的特殊异常消息,但我认为这是不可能的,这要感谢所有的you如果参数不是double或隐式转换为double,编译器将不接受编译。或者我误解了你吗?这取决于该方法中发生了什么,可能引发这样的异常。目前不可能发生这样的异常。@Steve这是真的,但我想创建我的角色l我的类的异常,所以当有人访问我的类时,他将收到我的特殊异常消息,但我认为这是不可能的,因为你们所有人