我正在尝试提出一种可接受的模式,用于使用Enterprise Library从数据库中读取数据。您如何看待以下模式(我的意思是,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();
}
}这种null-check是否可以接受,或者有没有更好的方法来解决这个问题?
发布于 2011-06-30 17:35:12
我会使用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 */
}发布于 2011-06-30 17:34:39
它与以下内容相同:
if (NewReader != null) ... 从造型的角度来看,我更喜欢它。
更新:
由于NewReader似乎实现了IDisposable,因此只需将其包装在using构造中即可。
示例:
using (var r = new ReaderSomething())
{
try
{
}
catch {}
}发布于 2011-06-30 17:35:22
我更喜欢使用" using“块作为:
using(<your reader object>)
{
//read data from reader
}https://stackoverflow.com/questions/6532750
复制相似问题