2012-01-23 7 views
6

a.AnswerIdのタイプがlong?である次の式があります。 ReSharperは、選択機能で可能なInvalidOperationExceptionを警告します。これが実際に起こるケースはありますか?あなたはa.AnswerIdが値を持っていることをWhereにチェックしているのでR#のフォローアップに関する警告:可能な「System.InvalidOperationException」

long[] ids = answers.Where(a => a.AnswerId.HasValue) 
        .Select(a => a.AnswerId.Value) 
        .ToArray(); 
+0

これらの問題がいつ解決されるかは、JetBrainsの問題追跡ツールで次のように追跡できます。http://youtrack.jetbrains.net/issue/RSRP-213609 http://youtrack.jetbrains.net/issue/RSRP -200225 – AakashM

答えて

7

(コーナーケースが細かすぎる)(別のスレッドが同時にデータを変更されない限り)、a.AnswerId.ValueInvalidOperationExceptionをスローすることはありません。 Resharperはコード解析能力はかなり良いですが、すべてを見つけることはできません。この場合、WhereSelect.Valueを安全に呼び出すことを認識していません。したがって、この警告は無視しても問題ありません。

4

残念ながら、ReSharperはしばしば偽陽性となります。この場合、WhereSelectの呼び出しで、AnswerIdが同じ値を返す限り、問題はありません。 (AnswerIdには最初にアクセスしたときに数値を返すクレイジーな実装がありません。null 2回目)

3

残念ながら、ReSharperはLINQラムダシーケンスを通して条件チェックを追跡することはできません。これは既知の問題です。

関連する問題