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

魅力的なステートメントは、「最初のものは処分しない」と言うことですが、そうします。

ExecuteReader2 番目の魅力的なステートメントは、 「例外がスローされた場合、最初のステートメントは破棄しない」ということですが、この場合はどちらも破棄しません。

でエラーが発生した場合ExecuteReader両方のインスタンスでifxDataReadersが割り当てられていないDisposeため、コールは解決されません。余談ですが、への呼び出しCloseは実際には必要ありません。

Dispose両方のインスタンスで呼び出され、同じ状況であると信じています。

変数のスコープが変更されます。2 番目のインスタンスでifxDataReadersは にスコープが設定されていusingますが、最初のインスタンスでは のifxDataReaders使用できます(ただし、この時点では破棄されたオブジェクトを使用しています)。using

2 番目の形式が推奨されます。私には、より明示的で読みやすいように思えます。

于 2012-07-25T10:02:10.177 に答える
1

最初のケースでは、using ブロックの内側と外側にオブジェクト ifxDataReaders があります。

2 番目のケースでは、using ブロック内に ifxDataReaders オブジェクトしかありません。

于 2012-07-25T10:01:35.757 に答える
1

最初の変数が再初期化されずに使用された場合、 ObjectDisposed 例外を発生させるために使用できるということだけです。

于 2012-07-25T10:01:49.767 に答える
-2

2 番目のケースDisposeでは、自動的に呼び出されます。

于 2012-07-25T10:00:45.813 に答える