C# 什么';在这两种情况下使用的区别是什么
我想知道,如果有区别:C# 什么';在这两种情况下使用的区别是什么,c#,asp.net,performance,database-connection,using,C#,Asp.net,Performance,Database Connection,Using,我想知道,如果有区别: IfxDataReader ifxDataReaders = ifxCommand.ExecuteReader(); using (ifxDataReaders) { if (ifxDataReaders.Read()) { item = (i
IfxDataReader ifxDataReaders = ifxCommand.ExecuteReader();
using (ifxDataReaders)
{
if (ifxDataReaders.Read())
{
item = (int)ifxDataReaders[0];
}
ifxDataReaders.Close();
}
在第二种情况下,将自动调用
Dispose
。在第一种情况下,在using块内外都有一个对象ifxDataReaders
在第二种情况下,在using块中只有ifxDataReaders对象。只有第一个块中的变量可以导致ObjectDisposed异常,如果在未重新初始化的情况下使用它。诱人的语句是说“第一个不会处理”,但它会 第二个诱人的说法是“如果
ExecuteReader
抛出异常,则第一个不会处理”,但在这种情况下,两个都不会处理
如果在ExecuteReader
中发生错误,则在这两种情况下ifxDataReaders
将未分配,因此Dispose
调用无论如何都不会解决。另外,实际上并不需要调用Close
Dispose
在这两种情况下都会被调用,我相信情况是一样的
变量范围将更改。在第二个实例中,ifxDataReaders
的作用域是使用
,而在第一个实例中,ifxDataReaders
可以在使用
之后使用(尽管此时您将使用已处理的对象)
第二种形式是首选的,对我来说,它似乎更明确,更可读。范围不同-在第一种情况下,您可以再次使用ifxDataReaders,在第二种情况下,它将只是Local。您应该在第一种形式中看到此线程,也将调用Dispose。很抱歉,我忘记发布它了。
using(IfxDataReader ifxDataReaders = ifxCommand.ExecuteReader())
{
if (ifxDataReaders.Read())
{
item = (int)ifxDataReaders[0];
}
ifxDataReaders.Close();
}