使用和尝试最后,我应该选择什么

本文关键字:我应该 选择 什么 最后 | 更新日期: 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…最后,

using语句确保即使在调用对象的方法时发生异常也会调用Dispose。

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

这是多余的。但是记住,如果你想捕获异常,那么你需要一个try-catch。Using语句不会捕获任何异常。它只是关闭并处理对象

由于您调用的是Close而不是Dispose ,因此代码冗余并不明显。

MemoryStream.Dispose的文档说明调用Dispose时流是关闭的:

该方法通过将任何更改写入后备存储并关闭流以释放资源来处置流。

Which 推断 Close被调用。然而,当你用完流后显式地关闭它并没有的危害。

底线:它是多余的吗?可能。伤到什么了吗?绝对不是。我更喜欢养成自己打扫卫生的习惯,即使清洁工在我后面进来,没有什么事可做(或者再次打扫)。