我正在尝试使用企业库从数据库中读取数据的可接受模式。您如何考虑以下模式(我的意思是,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();
}
}
这种空检查是否可以接受,或者是否有更优雅的方法来解决这个问题?
答案 0 :(得分: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 */
}
答案 1 :(得分:4)
与以下内容相同:
if (NewReader != null) ...
我更喜欢从造型的角度来看。
<强>更新强>
由于NewReader
看似实现IDisposable
,只需将其包装在using
构造中。
示例:
using (var r = new ReaderSomething())
{
try
{
}
catch {}
}
答案 2 :(得分:3)
我更喜欢使用“using”块:
using(<your reader object>)
{
//read data from reader
}
答案 3 :(得分:0)
只是为人们上面所说的内容添加一些细节......
使用using块,无论是否发生异常,都会自动调用Dispose方法,因为IDataReader的实现也必须实现IDisposable。