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

时间:2013-04-29 14:10:05

标签: c# try-catch using

我有以下代码块;

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组合冗余吗?

4 个答案:

答案 0 :(得分:4)

是的,这是多余的。

  

using语句确保即使调用Dispose也会调用   在对象上调用方法时发生异常。您可以   通过将对象放在try块中来实现相同的结果   然后在finally块中调用Dispose;其实这是怎么回事   using语句由编译器翻译。

using Statement (C# Reference)

答案 1 :(得分:1)

你不需要终于。实际上,using块是使用try ... finally实现的。

  

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

由于您正在调用Close而不是Dispose ,代码是多余的并不明显。

MemoryStream.Dispose的{​​{3}}表示在调用Dispose时该流已关闭:

  

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

哪个推断被调用Close。但是,当您完成流时,显式关闭流时会有无害

底线:这是多余的吗?大概。它伤害了对抗吗?绝对不。我宁愿养成在自己身后清理的习惯,即使看门人进来后也无事可做(或再次清理)。