1

私は次の方法を持っており、Resharper はif(drivers != null)常に true になることを教えてくれますが、理由がわからず、catchブロックが冗長であると教えてくれますが、誰かが理由を説明できますか? コードは次のとおりです。

public List<Driver> GetDrivers(int id)
        {
            if (_context != null)
            {
                try
                {
                    var drivers = _context.Drivers.Where(x=> x.id == id).ToList();


                    //Always true
                    if (drivers != null)
                    {
                        //code
                    }
                    else
                    {
                        //Heuristically unreachable
                        throw new Exception("No Driver");
                    }
                }
                catch (Exception ex)
                {
                    throw;
                }
            }

            return drivers;
        }
  1. なぜif(drivers != null)常に真なのですか?ドライバーを null にすることはできませんか? それが正しければ、null ではないドライバーのデフォルト値があると思います。
  2. ドライバーがnullになることはないと考えているため、elseステートメントに到達できないと言っていると思いますが、これは事実ですか?
  3. catch冗長であることがわかりますが、ヌルであることに加えて、リシャーパーはできないと言っていますが、スローされる可能性のある別の例外がありませんcatchか?
4

3 に答える 3

5

コレクションを返す .Where を使用しています。一致しない場合は空のコレクションになるため、null にはなりません。

.Where の代わりに .SingleOrDefault を使用したいと思います。

于 2013-05-16T17:43:07.777 に答える
5

キャッチは確かに冗長です。まったく同じ例外を再スローするだけで、何もしていません。

catch (Exception ex)
{
   // would make more sense if for example you're writing to log file

   // otherwise this will be thrown anyway (even without the catch)
   throw;
}

また、これは null を返すことはありません。エントリが 0 になることもありますが、null にはなりません。

_context.Drivers.Where(x=> x.id == id).ToList();
于 2013-05-16T17:43:10.357 に答える
2

エラーを再度スローするだけで、追加の処理を行わないため、try ブロックは冗長です。例外を削除するとtry/catch、とにかくバブルアップします。投げる必要はありません。

コレクション.Whereを返します。null になることはありませんが、空になる可能性があります。

于 2013-05-16T17:43:54.190 に答える