什么时候SqlCommand.ExecuteReader()会返回null?

Ray*_*Ray 12 .net resharper sqlcommand nullreferenceexception

当使用调用SqlCommand.ExecuteReader()方法时,ReSharper告诉我,当我之后使用SqlDataReader对象时,我有一个可能的NullReference异常.

所以使用以下代码:

using (SqlConnection connection = GetConnection())
{
    using (SqlCommand cmd = connection.CreateCommand())
    {
        cmd.CommandText = ; //snip

        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                //snip
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

while (reader.Read())行加下划线.

我的问题是读者对象何时会为空?我从来没有遇到它,文档没有提到它可能.我应该检查它是否为空或是否可以安全忽略?

为什么ReSharper认为它可能为null,例如它让我使用SqlCommand而不建议检查null?我猜是ExecuteReader方法有一个属性.

Tat*_*eva 12

这是误报.

反思SqlDataReader.ExecuteReader,我可以看到读取器返回null的唯一方法是,如果内部RunExecuteReader方法为returnStream传递'false',它不是.

在SqlDataReader的深处,总是会在某个时刻调用一个 reader构造函数,所以我很确定ExecuteReader在物理上不可能返回null.