2011-06-30 86 views
0

我想用自己的数据从企业库中读取数据的可接受模式。您如何考虑以下模式(我的意思是,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(); 
    } 
} 

这是否为空检查可接受,还是有更好的方法来解决这个问题?

回答

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

它是相同的:

if (NewReader != null) ... 

我会从一个造型点偏爱。

更新:

由于NewReader看似实现IDisposable,只是把它包在一个using结构。

实施例:

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

我宁愿使用“使用”块为:

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

我想补充一点细节到什么人上面已经说过...

使用using块,不管是否发生异常,Dispose方法都会自动调用,因为IDataReader的实现也必须实现IDisposable。

相关问题