C#2010 基于类型的筛选异常
在C#中发生异常时,异常沿对战向上传递,每个catch语句块都有机会处理该异常。catch语句的顺序十分重要,在编写异常处理的代码时,应将针对特定异常的catch语句块放在常规异常catch语句块之前,否则编译器可能会发生错误。
确定正确catch语句块的方法是将异常的类型与catch语句块中指定的异常名称进行匹配。如没有特定的catch语句块,则由可能存在的常规catch语句块捕捉异常。
要想捕获某一个被抛出的异常,只有该异常的类型与某个catch语句中指定的异常类型相匹配时,才会执行这个catch语句。基于类型筛选的异常处理程序指定仅捕捉特定类型的异常,从而可以使开发者更加详细地获得指定异常的信息。
在下面的代码中,就将示范一个使用try…catch语句块捕捉InvalidCastException异常,代码如下所示。
public class goods
{
float gPrice;
public float GPrice
{
get
{
return (gPrice);
}
set
{
gPrice = value;
}
}
}
在上面的代码中,创建了一个名为goods的类,其带有一个字段gPrice和一个属性GPrice,表示商品的价格,其可供之后的promoteGoods()方法取得对象并促销价格时使用,代码如下。
public class gx
{
public static void promoteGoods(Object goo)
{
goods g = (goods)goo;
g.GPrice = g.GPrice * 0.9f;
}
public static void Main(string[] args)
{
try
{
Object o = new goods();
DateTime newyears = new DateTime(2011 , 9 , 5);
promoteGoods(o);
promoteGoods(newyears);
}
catch (InvalidCastException e)
{
编译器错误 Console.WriteLine("向promoteGoods()方法传值时错误:" + e);
}
}
}
在上面的代码中,先创建了goods对象o,然后以o为参数调用promoteGoods()方法。由于这里将float型数据传递给promoteGoods()方法时将抛出InvalidCastException异常,然后又将一日期型对象newyears传递给promoteGoods()方法,在不能强制将DataTime类型转换为goods类型,因此会抛出异常,如图6-2所示。
图6-2 抛出异常结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论