在c#中如何在无效参数类型异常发生之前处理它
本文关键字:前处理 异常 参数 无效 类型 | 更新日期: 2023-09-27 18:12:25
在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) < Double.MinValue
在这种情况下,这将导致一个错误。
在调用该方法之前,验证您传递的参数实际上是有效的类型。
或者,在调用周围使用try和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
的参数调用函数。如果用户使用了错误的参数类型,这将不会是异常。为此,您可以对照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;
}
}
您甚至不能将其编译为接受非双精度或可转换为双精度的内容。然而,由于编译可能发生在执行附近(例如,当调用代码位于.aspx文件中时),因此有时使用有一点意义。在这种情况下,使用一个接受object
参数的表单也很方便,这样使用DataBinder.Eval
的结果进行强制转换就不必在page上完成了:
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,因为我知道常见的异常比你更好。