c# 逐行写txt_【c#】不要随意使用 try catch

声明:本文部分内容来源于《More Effective C#》

大家先设想一下这种情形,你是一个类的开发者,你想把该类的 API 提供给用户使用,假如说,你现在有一个 API DoWork(),这个 DoWork() 有可能会抛出异常,那么用户在使用你这个 API 的时候,他只能按照下面这种方法编程。

var worker = new MyWorker();
try
{
	Worker.DoWork();
}
catch (Exception e)
{
	ReportErrorToUser(“xxx error occurs, check xxxx.”)
}

这样编写存在三种弊端,首先,当用户捕捉到错误时,实际上他并不知道这个错误到底是 DoWork() 里面的哪个位置出的错,人家不是设计者嘛,不清楚你的内部逻辑是怎样的。第二,当你提供的 API 都有可能出现异常时,程序会出现大量的 try catch,这十分影响代码的整洁度和可读性。第三,try catch 对程序性能的影响比较严重。

我们在举一个简单的例子做对比。

实现一:

try
{
	File.Open(“C:Codetest.txt”);
}
catch(Exception e)
{
	Console.WriteLine(e);
}

实现二:

if(File.Exists())
{
	File.Open(“C:Codetest.txt”);
}
else
{
	Console.WriteLine("File doesn't exist");
}

我们发现,实现二无论在可读性上还是在错误捕捉的清晰性上都要高于实现一,用户显然知道错误发生的原因有可能是文件不存在,而不用依赖于异常信息来了解错误(有时异常信息甚至不能准确地反馈错误)

因此养成一下的这种设计模式是一个非常好的习惯:

if(Class.ConditionA() || Class.ConditionB() || Class.ConditionC())
{
	Console.WriteLine("XXX Error");
	return;
}
else if(Class.ConditionD())
{
	Console.WriteLine("XXX Error");
	return;
}
Class.DoWork();

而不是把逻辑装在若干个 try catch 里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值