跟进R#警告:可能'System.InvalidOperationException'

时间:2012-01-23 00:06:14

标签: c# resharper

我有以下表达式,其中a.AnswerId的类型为long?。 ReSharper警告select函数中可能有InvalidOperationException。有没有这种情况真的会发生? (角落也很好)

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

3 个答案:

答案 0 :(得分:7)

由于您检查Where a.AnswerId有值,a.AnswerId.Value永远不会抛出InvalidOperationException(除非另一个线程同时更改数据) 。 Resharper具有相当不错的代码分析功能,但它无法发现所有内容,在这种情况下,它没有意识到Where可以安全地调用.Value中的Select,因此警告。所以你可以放心地忽略这个警告。

答案 1 :(得分:4)

不幸的是,ReSharper经常会出现误报。在这种情况下,只要AnswerId在调用WhereSelect时返回相同的值,就不会出现问题。 (确保AnswerId没有一些疯狂的实现,在第一次访问时返回一个数字,第二次null。{/ p>

答案 2 :(得分:3)

不幸的是,ReSharper无法通过LINQ lambdas序列跟踪条件检查。这是一个已知问题。