C#using:构造函数以不同的方法

Din*_*nah 6 c# using

我可以using在使用括号中直接找到C#实例化的所有在线示例:

using (var cnx = new SqlConnection()) { }
Run Code Online (Sandbox Code Playgroud)

我认为以下应该采取相同的行动,但我似乎仍然锁定了资源:

SqlConnection GetConnection() { return new SqlConnection(); }
void foo()
{
    using (var cnx = GetConnection()) { }
}
Run Code Online (Sandbox Code Playgroud)

当我单步执行我的程序并进入使用的右大括号后面的行时,我希望能够以任何方式使用SQL Server Management Studio更改数据库,但我不能.当我关闭我的应用程序时,错误消失了.

这不是隔离到SQL; 我也通过这种方式打开文件流来体验这一点.那就是:超越using块,但操作系统不允许外部应用程序更改文件.

我违反了using合同的某些部分吗?

Jon*_*eet 5

使用返回适当资源的方法绝对没问题.特别是,这很常见:

using (var writer = File.CreateText(path))
{
}
Run Code Online (Sandbox Code Playgroud)

(和类似的方法File).

基本上,这与调用方法或调用构造函数无关 - 必定存在其他错误.如果你可以创建一个简短而完整的程序(使用文件而不是数据库理想情况下)证明了问题,那么我们很可能能够帮助你找出什么问题,而不仅仅是什么是不:)