首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下面的模式可以接受吗?

下面的模式可以接受吗?
EN

Stack Overflow用户
提问于 2011-06-30 17:32:25
回答 4查看 80关注 0票数 0

我正在尝试提出一种可接受的模式,用于使用Enterprise Library从数据库中读取数据。您如何看待以下模式(我的意思是,finally块中的空检查)?

代码语言:javascript
复制
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是否可以接受,或者有没有更好的方法来解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-30 17:35:12

我会使用if(NewReader == null)。这是检查null的默认方式。你做这件事的方式是一样的,但它看起来很奇怪,因此可能会让人感到困惑。

另外:为什么不使用using呢?让你的代码更加整洁:

代码语言:javascript
复制
try
{
    using(IDataReader NewReader = (SqlDataReader)(SqlDatabase.ExecuteReader(SqlCommand)))
    {
        /* Do some work with NewReader. */
    }
}
catch /* As much 'catch' blocks as necessary */
{
    /* Handle exceptions */
}
票数 5
EN

Stack Overflow用户

发布于 2011-06-30 17:34:39

它与以下内容相同:

代码语言:javascript
复制
if (NewReader != null) ... 

从造型的角度来看,我更喜欢它。

更新:

由于NewReader似乎实现了IDisposable,因此只需将其包装在using构造中即可。

示例:

代码语言:javascript
复制
using (var r = new ReaderSomething())
{
  try
  {
  }
  catch {}
}
票数 4
EN

Stack Overflow用户

发布于 2011-06-30 17:35:22

我更喜欢使用" using“块作为:

代码语言:javascript
复制
using(<your reader object>)
{
   //read data from reader
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6532750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档