C# 在using语句之外声明资源

C# 在using语句之外声明资源,c#,.net,idisposable,sqlconnection,using-statement,C#,.net,Idisposable,Sqlconnection,Using Statement,我有一个关于C#使用语句的问题。根据文档,在using语句中声明和初始化资源(例如,SqlConnection对象)是最佳实践。我的问题是:如果我只在using范围之外声明对象(并将其初始化为using语句的一部分),它是否完全等同于将其声明为using语句的一部分?我的用例是需要在使用范围之外使用SqlConnection对象。(我想在它上面调用SqlConnection.ClearPool,以防出现某些特定的异常。这两种情况都是等效的。但是当您在using语句的范围之外声明一个变量时,该变量

我有一个关于C#
使用
语句的问题。根据文档,在using语句中声明和初始化资源(例如,
SqlConnection
对象)是最佳实践。我的问题是:如果我只在using范围之外声明对象(并将其初始化为using语句的一部分),它是否完全等同于将其声明为using语句的一部分?我的用例是需要在使用范围之外使用
SqlConnection
对象。(我想在它上面调用
SqlConnection.ClearPool
,以防出现某些特定的异常。

这两种情况都是等效的。但是当您在using语句的范围之外声明一个变量时,该变量将在using语句的范围完成后被释放,但仍然保留在范围内using语句作用域之后的变量可能会导致抛出异常。这被认为是一种不好的做法,是可以避免的。我从来没有理由在using语句之前声明变量。

using to finally under the hood的概念,所以使用(var x=new Instance){what evey}等东西就等于尝试{var x=new Instance}最后{x.Dispose}在using语句之前声明变量,然后在using语句中初始化变量并不重要。using语句的作用域是在退出using块时处置该变量。但是,如果不重新初始化该变量,则无法再使用该变量。