C# try catch 使用

try catch使用场景:
1. 一般在线程,委托中使用, 在线程与委托中使用是因为,如果线程和委托中出现异常在程序外部是捕获不到的,需要在内部做单独处理。
2. 程序的外层使用,比如程序的入口处加一个全局异常捕获,这样整个程序发生的异常都可以捕获到。
3. 在事件或者主体方法中使用,一些小的公共方法可以不使用,需要单独处理异常的除外。
4. 在一些调用比较多的公共方法里如果使用tryc catch 最好将异常 throw抛出去,又上层处理异常,这样在发现异常时可以知道是由那个方法调用的。
5. 很多时候程序部署到现场是没有源码可以调试的,这个时候就得需要通过分析日志来排查问题,try catch 大多会和logNet4 结合使用,在catch中使用logNet4记录异常信息,lognet4记录的日志可以把异常方法调用的层级以及具体代码的行号记录下拉方便排查问题。
6. try catch不能写的太多,也不能写的太少。写太少1. 容易把系统的异常信息弹窗提示到页面,可是这个提示信息用户是看不懂的,造成不好的用户体验。2. 程序容易闪退,还找不到因为什么原因闪退。try catch写的太多,在调用比较多方法里发生异常了,可能就不方便定位是由那个功能调用的这个方法导致的异常了,不方便排查问题。
 

在C#中,try-catch语句用于异常处理。它允许您在代码块中检测和捕获异常,以便您可以在程序运行时进行错误处理和调试。

try-catch语句的基本结构如下:

try
{
// 可能引发异常的代码
}
catch (ExceptionType1 ex)
{
// 处理特定异常类型ExceptionType1的代码
}
catch (ExceptionType2 ex)
{
// 处理特定异常类型ExceptionType2的代码
}
catch (ExceptionType3 ex)
{
// 处理特定异常类型ExceptionType3的代码
}
finally
{
// 无论是否发生异常,都会执行的代码
}

try块中,您放置可能会引发异常的代码。当执行到try块中的代码时,如果发生异常,程序将跳转到与异常类型匹配的catch块。您可以根据需要添加多个catch块,以处理不同类型的异常。最后一个catch块通常不指定异常类型,因此它将捕获所有未处理的异常。

finally块是可选的,它包含的代码无论是否发生异常都会执行。这对于清理资源或执行必要的操作非常有用,例如关闭文件或数据库连接。

以下是一个使用try-catch语句的示例:

try
{
int result = 0;
result = 10 / 0; // 除以零将引发DivideByZeroException异常
}
catch (DivideByZeroException ex)
{
Console.WriteLine("除数不能为零:{0}", ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("发生未处理的异常:{0}", ex.Message);
}
finally
{
Console.WriteLine("程序结束。");
}
在上面的示例中,我们尝试将10除以0,这将引发DivideByZeroException异常。try-catch语句捕获该异常,并执行与DivideByZeroException类型匹配的catch块。然后,无论是否发生异常,都会执行finally块中的代码。

 

以下是一些其他使用try-catch语句的示例:

    1. 文件读取示例:
try
{
using (StreamReader reader = new StreamReader("file.txt"))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
}
catch (FileNotFoundException ex)
{
Console.WriteLine("文件未找到:{0}", ex.Message);
}
catch (IOException ex)
{
Console.WriteLine("文件读取错误:{0}", ex.Message);
}
finally
{
Console.WriteLine("程序结束。");
}
  1. 网络连接示例:
    try
    {
    using (TcpClient client = new TcpClient("example.com", 80))
    {
    NetworkStream stream = client.GetStream();
    // 进行网络通信操作
    }
    }
    catch (SocketException ex)
    {
    Console.WriteLine("网络连接异常:{0}", ex.Message);
    }
    catch (Exception ex)
    {
    Console.WriteLine("发生未处理的异常:{0}", ex.Message);
    }
    finally
    {
    Console.WriteLine("程序结束。");
    }
    1. 数据库连接示例:
      try
      {
      using (SqlConnection connection = new SqlConnection("connectionString"))
      {
      connection.Open();
      // 进行数据库操作
      }
      }
      catch (SqlException ex)
      {
      Console.WriteLine("数据库连接异常:{0}", ex.Message);
      }
      catch (Exception ex)
      {
      Console.WriteLine("发生未处理的异常:{0}", ex.Message);
      }
      finally
      {
      Console.WriteLine("程序结束。");
      }

      4. 用户输入验证:

      try
      {
      // 进行用户输入验证操作,例如验证用户名或密码的合法性
      }
      catch (FormatException ex)
      {
      Console.WriteLine("输入格式错误:{0}", ex.Message);
      }
      catch (InvalidOperationException ex)
      {
      Console.WriteLine("输入无效:{0}", ex.Message);
      }
      catch (Exception ex)
      {
      Console.WriteLine("发生未处理的异常:{0}", ex.Message);
      }
      finally
      {
      Console.WriteLine("程序结束。");
      }

      这些示例展示了如何在不同的情况下使用try-catch语句来处理可能发生的异常,并相应地进行错误处理和程序结束的操作。

    2. c# 委托中需要写 try catch 吗
       

      在C#中,委托是一种引用方法的数据类型,可以像其他对象一样被传递和操作。当使用委托时,是否需要使用try-catch语句来处理异常取决于具体的情况。

      如果你在代码中直接调用委托,并且该委托引用的方法是可能会抛出异常的,那么你需要考虑是否需要使用try-catch语句来捕获异常。例如,如果委托引用的是一个访问数据库的方法,而该方法可能会在数据库连接失败时抛出异常,那么在调用该委托时,你可能需要使用try-catch语句来捕获该异常并做出相应的处理。

      另一方面,如果你在代码中通过委托链式调用多个方法,那么每个方法都需要独立的异常处理逻辑。在这种情况下,你可能需要在每个方法中都使用try-catch语句来捕获异常,并做出相应的处理。

      总之,是否需要使用try-catch语句来处理委托中的异常取决于具体的情况和需求。如果可能存在异常情况,建议在适当的位置使用try-catch语句来捕获和处理异常,以确保程序的稳定性和可靠性。

      c# 线程中写 try catch
       

      在C#中,当在多线程环境中编写代码时,使用try-catch语句来捕获异常是非常重要的。由于多个线程可能同时执行代码,因此异常可能会在不同的线程中发生。为了能够正确地处理异常,建议在每个线程的代码中都使用try-catch语句。

      以下是一个示例,展示了如何在C#多线程中使用try-catch语句:

      using System.Threading;
      
      class Program
      {
          static void Main(string[] args)
          {
              // 创建两个线程
              Thread thread1 = new Thread(ThreadTask1);
              Thread thread2 = new Thread(ThreadTask2);
      
              // 启动线程
              thread1.Start();
              thread2.Start();
      
              // 等待两个线程完成
              thread1.Join();
              thread2.Join();
          }
      
          static void ThreadTask1()
          {
              try
              {
                  // 在此处执行可能引发异常的代码
              }
              catch (Exception ex)
              {
                  // 处理异常
                  Console.WriteLine("Thread 1异常:{0}", ex.Message);
              }
          }
      
          static void ThreadTask2()
          {
              try
              {
                  // 在此处执行可能引发异常的代码
              }
              catch (Exception ex)
              {
                  // 处理异常
                  Console.WriteLine("Thread 2异常:{0}", ex.Message);
              }
          }
      }

      在上述示例中,我们创建了两个线程,每个线程都执行不同的任务。在每个任务的代码中,我们都使用了try-catch语句来捕获可能发生的异常,并进行了相应的处理。这样,无论哪个线程发生异常,我们都可以捕获并处理它,以避免程序出现不可预期的行为。

      try catch throw
      在编程中,try-catch-throw是一种常见的错误处理模式。这三个关键字通常一起使用,以捕获异常、处理异常和重新抛出异常。
      throwthrow关键字用于在代码中手动抛出异常。当使用throw关键字时,程序将停止当前方法的执行,并跳转到调用该方法的最近的catch块。
      需要注意的是,throw关键字只能抛出继承自Exception类的对象。此外,如果方法内部没有提供处理异常的逻辑,而是直接抛出异常,那么在调用该方法时需要使用try-catch块或者声明该方法抛出异常。
posted @ 2023-09-11 20:41  我家有个小鸡仔  阅读(1376)  评论(0编辑  收藏  举报