0

I have the following code block;

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();
    }
}

I have read somewhere that a using statement automatically disposes the object.

Question:

Is using the Try/Finally combination redundant, when I already use the using statement?

4

4 回答 4

4

是的,这是多余的。

using 语句可确保调用 Dispose,即使在调用对象上的方法时发生异常也是如此。您可以通过将对象放在 try 块中,然后在 finally 块中调用 Dispose 来获得相同的结果;事实上,这就是编译器翻译 using 语句的方式。

using 语句(C# 参考)

于 2013-04-29T14:12:33.770 回答
1

你不需要finally。实际上, using 块是在内部使用 try... finally 实现的。

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

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

于 2013-04-29T14:12:36.740 回答
1

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

于 2013-04-29T14:19:22.373 回答
0

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

文档表明MemoryStream.Dispose调用时流已关闭Dispose

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

由此推断Close称为。但是,完成后明确关闭流并没有什么害处

底线:它是多余的吗?大概。是不是很痛?绝对不。我更愿意养成自己打扫卫生的习惯,即使看门人在我身后进来并且无事可做(或再次打扫)。

于 2013-04-29T14:20:03.660 回答