首页 > 解决方案 > 仅当 C# 中未发生另一个异常时如何捕获异常

问题描述

所以我是一名编程学生,我希望我的代码对异常进行尝试捕获,但前提是没有发生另一个异常。让我告诉你我想要的:

using (var ctxInsert = new model())
{
    CATEGORIES c1 = new CATEGORIES(6, "cat6", "category6");
    Console.WriteLine("Please wait while rows are added to tables...");
    //first try-catch to know if the new entry exist
    try
    {
        ctxInsert.CATEGORIES.Add(c1);
        
    }
    catch (ModelValidationException e1)
    {
        
       Console.WriteLine(e1.Message);
       Console.WriteLine("Category already exist");
            
    }
    //second try-catch to make sure saving changes to table is succesful
    try
    {
       ctxInsert.SaveChanges();
       Console.WriteLine(c1.NAME + " : Succesfuly added");
    }
    catch (DbEntityValidationException e)
    {
       Console.WriteLine(e.Message);
       Console.WriteLine("not done");
    }    
    
}
Console.ReadLine();

所以我想要做的是,第二个 try-catch 块只有在第一个 DIDN 没有捕获异常时才运行。因为现在,像这样,try-catch 都运行,如果第一个捕获异常,保存更改是没有意义的。

我自己尝试了很多东西,但没有任何效果......

标签: c#entity-frameworklinq

解决方案


try-catch 的全部意义在于阻止异常阻止其余代码执行。在您的情况下,我想到了一些选项:

  1. 确定 try-catch 是否真的是您正在寻找的 - 您还可以让您的方法抛出异常并阻止执行其余代码
  2. 在你的捕获中抛出一个异常,这样你就可以得到你的日志,它会告诉其余的代码出了问题,阻止执行
  3. 使用第一次捕获修改的变量,然后根据该变量有条件地执行其余代码
  4. 使用 try-catch-finally

推荐阅读