这篇文章介绍了C#各种异常的处理方式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
.NET的异常处理机制用来发现、处理运行时错误。如果开发人员没有提供异常的处理机制,就默认采用.NET的机制。
通常使用try...catch...finally捕获异常。
try
{
//有可能发生异常
}
catch(Exception ex)
{
//处理异常
}
finally
{
//清理
}
- 如果没有异常发生,就直接到finally语句块中。
- finally语句块是必须执行的
- 这里的catch和finally语句块是可选的。try语句块后面可以跟1个或多个catch语句块,try语句块后面可以直接跟finally语句块。
- Exception是所有异常的基类
使用.NET默认异常处理机制捕获异常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 100/a;
Console.WriteLine(result);
Console.ReadKey();
}
}
使用try...catch手动捕获异常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出现异常");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
使用try...catch...finally手动捕获异常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出现异常");
}
finally
{
Console.WriteLine("放行吧,肯定会执行到我这里的~~");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
可见,finally语句块中的内容一定会被执行。
使用try...多个catch...finally手动捕获异常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("不能被0除的异常");
}
catch (Exception ex)
{
Console.WriteLine("异常");
}
finally
{
Console.WriteLine("放行吧,肯定会执行到我这里的~~");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
可见,只要有一个catch语句块捕获到异常,其它catch语句块不执行。
使用try...catch(不带括号,不带参数)手动捕获异常
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch
{
Console.WriteLine("异常");
}
Console.WriteLine(result);
Console.ReadKey();
}
}
通过以上方法,可以捕获任何异常。
try...catch手动捕获抛出的异常
class Program
{
static void Main(string[] args)
{
try
{
throw new DivideByZeroException("除数不能为零");
}
catch (DivideByZeroException e)
{
Console.WriteLine("异常");
}
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
抛出异常本身并没有显示。
较高层次上下文捕获较低抛出的异常
class Program
{
static void Main(string[] args)
{
Calculate c = new Calculate();
try
{
c.Divide();
}
catch (Exception e)
{
Console.WriteLine("捕获异常");
}
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
public class Calculate
{
public void Divide()
{
try
{
int a = 0;
int result = 100/a;
}
catch (DivideByZeroException e)
{
throw;
}
}
}
在Calculate内部抛出的异常,被更高层次的客户端捕获。
自定义异常
class Program
{
static void Main(string[] args)
{
try
{
throw new MyException("i am exception");
}
catch (Exception e)
{
Console.WriteLine("捕获到自定义异常了~~");
}
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
public class MyException : Exception
{
public MyException(string str)
{
Console.WriteLine("这是我自定义的异常:" + str);
}
}
总结:
- .NET异常处理并不是标准的try...catch...finally,可以是很灵活的。
- 尽量在较低层次抛异常,在较高层次捕获异常。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对得得之家的支持。如果你想了解更多相关内容请查看下面相关链接
沃梦达教程
本文标题为:C#各种异常处理方式总结
猜你喜欢
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- user32.dll 函数说明小结 2022-12-26
- .NET CORE DI 依赖注入 2023-09-27
- 如何使用C# 捕获进程输出 2023-03-10
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- Unity Shader实现模糊效果 2023-04-27
- Unity3D实现渐变颜色效果 2023-01-16
- Oracle中for循环的使用方法 2023-07-04
- c# 模拟线性回归的示例 2023-03-14