1

我想知道,如果有区别:

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();

                         }
4

4 回答 4

3

诱人的说法是说“第一个不会处理”,但它会。

ExecuteReader第二个诱人的陈述是说“如果抛出异常,第一个不会处置”,但在这种情况下,两者都不会处置。

如果在 中发生错误ExecuteReader,则在这两种情况下ifxDataReaders不会被分配,因此Dispose无论如何调用都不会解决。顺便说一句,Close实际上不需要调用 to。

Dispose在这两种情况下都会被调用,我相信在相同的情况下。

变量范围会改变。在第二个实例中,ifxDataReaders作用域为 ,using而在第一个实例中,ifxDataReaders可以在 the之后使用using(尽管此时您将使用已处置的对象)。

第二种形式是首选,对我来说它似乎更明确并且更具可读性。

于 2012-07-25T10:02:10.177 回答
1

在第一种情况下,您在 using 块的内部和外部都有一个对象 ifxDataReaders。

在第二种情况下,您在 using 块中只有 ifxDataReaders 对象。

于 2012-07-25T10:01:35.757 回答
1

只有第一个变量中的变量在没有重新初始化的情况下被使用时才会导致 ObjectDisposed 异常。

于 2012-07-25T10:01:49.767 回答
-2

在第二种情况下Dispose将被自动调用。

于 2012-07-25T10:00:45.813 回答