如何解决仅当C#
所以我是编程的学生,我希望我的代码对异常进行try-catch,但仅当未发生另一异常时才进行。让我告诉你你想要我做:
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都运行,并且如果第一个捕获到异常,则保存更改没有任何意义。
我自己尝试了一堆东西,但没有任何效果...
解决方法
try-catch的全部目的是阻止异常阻止其他代码的执行。在您的情况下,有几种选择让我望而却步:
- 确定try-catch是否真的是您想要的-您也可以让方法抛出异常并阻止执行其余代码
- 在捕获中抛出异常,以这种方式获取日志,并告诉其余代码某些地方出了问题,从而阻止了执行
- 使用第一个catch修改的变量,然后根据该变量有条件地执行其余代码
- 最终尝试使用catch
如果只需要使代码按预期工作,则可以这样编写:
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);
ctxInsert.SaveChanges();
Console.WriteLine(c1.NAME + " : Succesfuly added");
}
catch (ModelValidationException e1)
{
Console.WriteLine(e1.Message);
Console.WriteLine("Category already exist");
}
catch (DbEntityValidationException e)
{
Console.WriteLine(e.Message);
Console.WriteLine("not done");
}
}
Console.ReadLine();
但是,我宁愿不带任何try / catch编写代码,而是在应用程序的顶层创建异常拦截器(有最佳实践,具体取决于您使用的框架)
,是的,您可以使用finally关键字,让我向您展示代码示例
using System;
namespace ErrorHandlingApplication {
class DivNumbers {
int result;
DivNumbers() {
result = 0;
}
public void division(int num1,int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught: {0}",e);
} finally {
Console.WriteLine("Result: {0}",result);
}
}
static void Main(string[] args) {
DivNumbers d = new DivNumbers();
d.division(25,0);
Console.ReadKey();
}
} }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。