2

我有一个类FooDataContext,它实现了 Linq 的 DataContext,它有Dispose()..

public partial class FooDataContext : System.Data.Linq.DataContext {...}

我知道我应该在 a 中声明 fooDataContext using(<here>){},所以会为我调用 Dispose() ,就像这样

public void Bar()
{
    using (var fooDataContext = new FooDataContext(ConnStr))
    { // some code
    }
}

但我不知道这是否一样好。是吗?幕后发生了什么?

public void Baz()
{
    var fooDataContext = new FooDataContext(ConnStr);
    using (fooDataContext)
    { // some code
    }
}
4

2 回答 2

4

后者的行为方式基本相同,但有一个缺点:您仍然可以在语句fooDataContext 之外using引用,尽管它随后被处置。这很少是一个好主意。

所以是的,使用第二个片段是完全合法的——但在几乎所有情况下你都应该更喜欢第一个版本。

于 2012-07-17T09:12:37.363 回答
2

实例化和实例化之间可能会发生异常,using特别是如果您添加自定义代码。在 using 中调用构造函数更安全。此外,使用第一个解决方案,您可以防止使用已处置的上下文。

public void Baz() 
{ 
    var fooDataContext = new FooDataContext(ConnStr); 
    //Exception here -> fooDataContext not disposed
    using (fooDataContext) 
    { // some code 
    }
    //You can see fooDataContext here
} 

如果你真的想在fooDataContext之后看到变量using,你可以试试这个:

public void Baz() 
{ 
    var fooDataContext; 
    using (fooDataContext = new FooDataContext(ConnStr))
    { // some code 
    } 
    //You can see fooDataContext here
} 
于 2012-07-17T09:20:52.833 回答