使用和尝试最后,我应该选择什么
本文关键字:我应该 选择 什么 最后 | 更新日期: 2023-09-27 18:11:15
我有以下代码块;
using (var msResp = new MemoryStream(Resp))
{
try
{
Response resp = new Response(msResp);
SetClientIdentityResponseValue sirv = new SetClientIdentityResponseValue(resp, (int)Response.Properties.Value);
if (!sirv.IsCredentialsValid)
{
throw new Exception("Authentication failed.");
}
if (sirv.IsSubscriptionExpired)
{
throw new Exception("Subscription expired.");
}
}
finally
{
msResp.Close();
}
}
我在某处读到using语句会自动处置对象。
问题:
当我已经使用using语句时,使用Try/Finally组合是否多余?
是的,这是多余的。
using语句确保Dispose被调用在调用对象上的方法时发生异常。你可以通过将对象放入try块和中来实现相同的结果然后在finally块中调用Dispose;其实,这是如何Using语句由编译器翻译。
using Statement (c# Reference)
不需要finally。实际上,using块是在内部使用try…最后,
http://msdn.microsoft.com/en-us/library/yh598w02.aspxusing语句确保即使在调用对象的方法时发生异常也会调用Dispose。
这是多余的。但是记住,如果你想捕获异常,那么你需要一个try-catch。Using语句不会捕获任何异常。它只是关闭并处理对象
由于您调用的是Close
而不是Dispose
,因此代码冗余并不明显。
MemoryStream.Dispose
的文档说明调用Dispose
时流是关闭的:
该方法通过将任何更改写入后备存储并关闭流以释放资源来处置流。
Which 推断 Close
被调用。然而,当你用完流后显式地关闭它并没有的危害。
底线:它是多余的吗?可能。伤到什么了吗?绝对不是。我更喜欢养成自己打扫卫生的习惯,即使清洁工在我后面进来,没有什么事可做(或者再次打扫)。