在C#中,如何在无效参数类型异常发生之前处理它?
在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
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我的类的异常,所以当有人访问我的类时,他将收到我的特殊异常消息,但我认为这是不可能的,因为你们所有人