在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。
,我想处理异常答案 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中的动态编译代码中传递错误的类型,我发现这比默认行为更令人困惑,因为我比你更了解常见的异常。