我想知道,如果之间存在差异:
IfxDataReader ifxDataReaders = ifxCommand.ExecuteReader();
using (ifxDataReaders)
{
if (ifxDataReaders.Read())
{
item = (int)ifxDataReaders[0];
}
ifxDataReaders.Close();
}
using(IfxDataReader ifxDataReaders = ifxCommand.ExecuteReader())
{
if (ifxDataReaders.Read())
{
item = (int)ifxDataReaders[0];
}
ifxDataReaders.Close();
}
答案 0 :(得分:3)
诱人的说法是说“第一个不会处置”,但它会。
第二个诱人的陈述是说“如果ExecuteReader
抛出异常,第一个将不会处置”,但在这种情况下 都不会处置。
如果ExecuteReader
发生错误,两个实例ifxDataReaders
中都会 分配,因此Dispose
来电将Close
永远不会解决。另外,实际上并不需要调用Dispose
。
ifxDataReaders
将在两个实例中被调用,我相信相同的情况。
可变范围将会改变。在第二个实例中,using
的范围限定为ifxDataReaders
,而在第一个using
中可以使用 {{1}}之后(尽管如此,你) d此时使用被处置物体。)
第二种形式是首选,对我来说它似乎更明确,更具可读性。
答案 1 :(得分:1)
在第一种情况下,在使用块的内部和外部都有一个对象ifxDataReaders。
在第二种情况下,你只在使用块中有ifxDataReaders对象。
答案 2 :(得分:1)
只有第一个中的变量可用于导致ObjectDisposed异常(如果在不重新初始化的情况下使用它)。
答案 3 :(得分:-2)
在第二种情况下,Dispose
将自动调用。