当我写这样的东西时:
using (var connection = new SqlConnection("ConnectionString"))
{
using(var cmd= new SqlCommand("Command"))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
}
}
}
}
ReSharper在reader.Read()
上显示警告,并告诉读者可以null
。
但在什么情况下它可以为空?据我所知,如果命令没有返回任何读者不为空,它只有什么都没有。
答案 0 :(得分:5)
鉴于在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>
答案 1 :(得分:1)
我认为它不能为空 - 但resharper不知道SqlCommand.ExeuteReader()
永远不会返回null。
据我所知,有一些xml用于告诉女巫函数可能会或可能不会返回null,并且可以在那里设置。
我不知道xml的名称和位置。