当我写这样的东西时:
using (var connection = new SqlConnection("ConnectionString"))
{
using(var cmd= new SqlCommand("Command"))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
}
}
}
}
ReSharper 在 reader.Read()
上显示警告,并告知 reader 可以是 null
。
但是什么情况下可以为null呢?据我所知,如果命令不返回任何内容,则 reader 不为空,它什么也没有。
最佳答案
鉴于这在 YouTrack 上被报告为错误(两次 - here 和 here),看起来 R# 附带的无效注释在这方面存在缺陷。
查看您的 ReSharper_installation_dir\Bin\ExternalAnnotations
文件夹 - 这是安装注释文件的位置。对我来说,在 v5 中,这里有一个文件 System.Data\System.Data.Nullness.xml
,其中包含以下注释:
<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
<attribute ctor="M:JetBrains.Annotations.CanBeNullAttribute.#ctor" />
</member>
如果您通过自己的检查确信这是错误的,并且 SqlCommand.ExecuteReader
永远不会返回 null,则您应该将其更改为
<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
<attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" />
</member>
关于c# - ReSharper 使用 SqlDataReader 显示警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3035593/