1

私がこのようなものを書くとき:

using (var connection = new SqlConnection("ConnectionString"))
{
    using(var cmd= new SqlCommand("Command"))
    {
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
            }
        }
    }
}

ReSharper は で警告を表示しreader.Read()、リーダーが である可能性があることを伝えますnull

しかし、どのような場合に null になるのでしょうか? 私が知っているように、コマンドが何も返さない場合、リーダーはnullではなく、何もありません。

4

2 に答える 2

5

これがバグとしてYouTrackで報告されていることを考えると(2回-ここここ)、R#に付属しているnullityアノテーションはこの点で不十分であるように見えます。

あなたの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>
于 2010-06-14T08:04:28.233 に答える
1

nullにすることはできないと思いますが、resharperはそれがSqlCommand.ExeuteReader()nullを返さないことを知りません。
私の知る限り、魔女の関数がnullを返す場合と返さない場合があることを伝えるために使用する、いくつかのxmlがあり、そこで設定できます。xmlの名前と場所はわかりませんが。

于 2010-06-14T07:37:07.720 に答える