2011-06-30 12 views
0

私は、エンタープライズライブラリを使用してDBからデータを読み取るための許容可能なパターンを考え出しています。あなたは次のパターンをどう考えますか(つまり、finallyブロックのヌルチェックですか?)次のパターンは受け入れられますか?

IDataReader NewReader = null; 

try 
{ 
    NewReader = (SqlDataReader)(SqlDatabase.ExecuteReader(SqlCommand)); 

    /* Do some work with NewReader. */ 

    NewReader.Close(); 
} 
catch /* As much 'catch' blocks as necessary */ 
{ 
    /* Handle exceptions */ 
} 
finally 
{ 
    if (!ReferenceEquals(NewReader, null)) 
    { 
     NewReader.Dispose(); 
    } 
} 

このヌルチェックは受け入れ可能なのですか、それともこの問題を解決するより洗練された方法がありますか?私は、ビューのスタイリングポイントから希望され

if (NewReader != null) ... 

答えて

5

私はif(NewReader == null)を使用します。 nullのデフォルトのチェック方法です。あなたのやり方は同じですが、それは奇妙に見え、人々を混乱させるかもしれません。

その他:usingを使用しないでください。私のように「使用」ブロックを使用して希望

try 
{ 
    using(IDataReader NewReader = (SqlDataReader)(SqlDatabase.ExecuteReader(SqlCommand))) 
    { 
     /* Do some work with NewReader. */ 
    } 
} 
catch /* As much 'catch' blocks as necessary */ 
{ 
    /* Handle exceptions */ 
} 
4

それは同じです。

更新:一見IDisposableを実装

NewReaderとして、ちょうどusing構築物中でそれをラップします。

例:

using (var r = new ReaderSomething()) 
{ 
    try 
    { 
    } 
    catch {} 
} 
3

:あなたのコードロットクリーナー作るだけの人は上記の言ったことに、詳細のビットを追加する

using(<your reader object>) 
{ 
    //read data from reader 
} 
0

を...

使用ブロックを例外として使用するかどうかにかかわらず、IDataReaderの実装によってIDisposableも実装されているため、Disposeメソッドが自動的に呼び出されます。

関連する問題