在以下代码中,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
在生成的 IEnumerable
中需要非空的 Read
对象,因为我正在访问 IsIndex
Read
类的属性。 resharper 是否只是不考虑 Aggregate
的种子参数?
编辑:我在这里提交了错误报告 https://youtrack.jetbrains.com/issue/RSRP-443055
最佳答案
从 ILSpy 中 Aggregate
的反汇编来看,ReSharper 似乎是错误的。
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
检查将导致空引用异常。
关于c# - 使用带种子的 LINQ 聚合,Resharper 声称表达式始终为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062230/