在以下代码中,Resharper声称表达式currMax == null
始终为false。
public Read Read1
{
get
{
return Reads.Where(read => !read.IsIndex)
.Aggregate((Read)null, (currMax, read) => currMax == null || read.Length > currMax.Length ? read : currMax);
}
}
当对Aggregate
的调用中的lambda表达式的第一次迭代执行时,我希望currMax == null
为真,因为(Read)null
是种子。 Resharper知道上游Where
在结果Read
中需要非空IEnumerable
个对象,因为我正在访问IsIndex
类的Read
属性。 resharper是否不考虑Aggregate
的种子参数?
答案 0 :(得分:1)
看起来ReSharper错了,从ILSpy中Aggregate
的反汇编来看。
public static TAccumulate Aggregate<TSource, TAccumulate>(
this IEnumerable<TSource> source,
TAccumulate seed,
Func<TAccumulate, TSource, TAccumulate> func)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (func == null)
{
throw Error.ArgumentNull("func");
}
TAccumulate tAccumulate = seed;
foreach (TSource current in source)
{
tAccumulate = func(tAccumulate, current);
}
return tAccumulate;
}
显然删除null
检查将导致空引用异常。
答案 1 :(得分:1)
这确实是ReSharper的可空性分析中的一个错误。你能报告给YouTrack吗?
在此期间,您可以使用// ReSharper disable once ConditionIsAlwaysTrueOrFalse
停止此警告。