C#各种异常处理方式总结

C#各种异常处理方式总结

什么是异常?

异常是指在程序运行过程中遇到的错误或情况,可以是处理到了程序正常运行范围之外的数据输入或其他问题。

异常处理的意义

在编写程序时,我们需要预先考虑到可能出现的异常情况,以规避程序崩溃或数据丢失等问题。异常处理可以帮助我们及时捕获异常并进行处理,避免程序崩溃或数据不完整。

异常处理方式

C#提供了多种异常处理方式,包括使用try-catch语句、使用throw关键字、使用finally语句块等。

try-catch语句

try-catch语句用于捕获异常并进行处理。try语句块中包含可能会抛出异常的代码,当代码执行时遇到异常时,控制权会跳转到catch语句块中的相应代码。

示例一:

try 
{
    // 可能抛出异常的代码
    int i = Convert.ToInt32("123abc");
} 
catch (FormatException e) 
{
    // 处理FormatException类型的异常
    Console.WriteLine("发生格式异常:" + e.Message);
} 
catch (Exception e) 
{
    // 处理其他类型的异常
    Console.WriteLine("发生异常:" + e.Message);
}

在示例一中,try语句块中执行了不合法的转换操作,因此将会抛出一个FormatException类型的异常。catch语句块中,我们捕获并处理了该异常。

throw关键字

throw关键字可以手动抛出一种特定的异常类型,并在抛出时带上相应的异常信息。通常用于在自己的代码中主动抛出异常。

示例二:

public string GetUserInfo(string userName)
{
    if (string.IsNullOrEmpty(userName))
    {
        throw new ArgumentNullException("userName", "用户名不能为空");
    }

    // 查询用户信息
    // ...
}

在示例二中,如果GetUserInfo方法的userName参数为空或是null,我们手动抛出一个ArgumentNullException类型的异常,并传入异常信息。

finally语句块

finally语句块用于包含一些无论是否出现异常都需要执行的代码逻辑。

示例三:

StreamReader sr = null;

try 
{
    sr = new StreamReader("test.txt");
    string line = sr.ReadLine();
    Console.WriteLine(line);
} 
catch (FileNotFoundException e) 
{
    Console.WriteLine("文件不存在:" + e.Message);
} 
catch (Exception e)
{
    Console.WriteLine("发生异常:" + e.Message);
}
finally 
{
    sr?.Close();
}

在示例三中,我们通过StreamReader读取了test.txt中的一行文本,如果文件不存在或是出现异常,我们将在相应的catch语句块中处理这些异常。在处理异常之后,我们需要确保及时关闭文件流,因此在finally语句块中调用了StreamReaderClose方法。

结语

通过使用try-catch语句、throw关键字和finally语句块,我们可以更好地处理和避免异常问题,提高程序的稳定性和鲁棒性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#各种异常处理方式总结 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C++中const的实现细节介绍(C,C#同理)

    下面是关于C++中const的实现细节介绍的完整攻略。 const的含义和作用 C++中的const常量表示一个不可改变的变量,即该变量的值不允许被修改。const常量通常用于定义程序中不会改变的数据,例如PI的值。const的作用相当于定义了一个只读的变量。 const的定义和初始化 const常量可以在定义时被初始化,也可以在后面进行初始化。 定义时初始…

    C# 2023年5月14日
    00
  • 通用的CRUD之LiteDB

    前言 你要开发一个系统,是不是首要任务是先建库,建表,建字段,既所谓的数据建模(听起来高大上一点,数据建模也确实是个烧脑的活),要费不少功夫。不知你是否遇到过这样的场景。A产品有3个测试参数,B产品有6个测试参数,而且值和类型都各不相同,用SQL你要怎么建表呢?有人会说这简单“参数名,参数值两列搞定”,NO!数据类型考虑了吗,数据量考虑了吗?有人又说”每个参…

    C# 2023年5月6日
    00
  • Silverlight中同步调用WebClient的解决办法,是同步!

    在Silverlight中,WebClient是一个常用的类,用于从Web服务器下载数据。默认情况下,WebClient使用异步方式下载数据,这意味着下载操作将在后台线程中执行,而不会阻塞UI线程。但是,在某些情况下,我们可能需要使用同步方式下载数据,以便在下载完成之前阻塞UI线程。本文将介绍如何在Silverlight中同步调用WebClient,并提供两…

    C# 2023年5月15日
    00
  • TypeScript Type Innference(类型判断)

    TypeScript Type Inference(类型判断)是 TypeScript 编译器所提供的一种类型推断机制,即在编译时自动推断变量、函数返回值等类型信息,从而使代码更加简洁、易读、易于维护。 TypeScript的类型推断包括以下两种情况: 变量定义时初始化赋值; 函数返回类型推断。 变量定义时初始化赋值 当定义变量并进行初始化赋值操作的时候,T…

    C# 2023年6月8日
    00
  • C# Add(T):将元素添加到 ICollection

    C#中的Add(T)方法主要是用来向List集合中添加元素的,T代表数据类型,可以是整型、浮点型、字符串、对象等等。本文将详细讲解C# Add(T)方法的使用方法和注意点。 语法 以下是Add(T)方法的基本语法: public void Add(T item); 参数 Add(T)方法的参数是要添加到List集合中的元素。 返回值 Add(T)方法没有返回…

    C# 2023年4月19日
    00
  • C#线程池操作方法

    下面我将为你详细讲解“C#线程池操作方法”的完整攻略。 C#线程池操作方法 线程池是C#多线程编程中一个非常重要的概念,它可以帮助我们管理线程的创建和销毁,避免线程频繁的创建和销毁导致的性能问题,提升程序的运行效率。下面我们将分别介绍线程池的创建、提交任务和销毁等操作方法。 创建线程池 在C#中创建线程池非常简单,只需要使用ThreadPool类的静态方法即…

    C# 2023年6月7日
    00
  • netcore mvc efcore 简单框架搭建+增删改查

    该例子使用的数据库是 mysql;.net core 框架,版本(sdk)是3.1。 一:创建个net core 版本的mvc  目标框架选   net core3.1  二:项目创建好之后  先安装今天要使用到的nuget包(下载的包最好也是3.1版本的) Microsoft.EntityFrameworkCore; Microsoft.EntityFra…

    C# 2023年4月19日
    00
  • C#键值对容器的介绍

    C#中的键值对容器主要指的是通过特定的键来访问元素的数据结构。它通常用于需要在某个特定条件下快速查找元素的情况,比如说搜索算法、缓存机制等。C#中的键值对容器有很多种,本文将从使用频率较高的Dictionary<TKey, TValue>和ConcurrentDictionary<TKey, TValue>两个类别来进行介绍。 Dic…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部