dotnet/roslyn
'IDE0031 Use null propagation' incorrectly suggested for LINQ expression with left join (DefaultIfEmpty)
Ouverte
#47 788 ouverte le 17 sept. 2020
Area-CompilersBugFeature - IDE0031IDE-CodeStylehelp wanted
Métriques du dépôt
- Stars
- (20 414 étoiles)
- Métriques de merge PR
- (Merge moyen 6j 17h) (256 PRs mergées en 30 j)
Description
[Update: IDE issue was traced to a problem with the GetSymbolInfo Compiler API, in part. See details below. May relate to another issue with visitors on this LINQ query]
Version Used: 16.7.3
The motivating situation that led to me filing https://github.com/dotnet/roslyn/issues/33992 was not covered by the fix for the minimal repro I gave in that issue.
Using the standard LINQ left outer join pattern:
_ = from itemA in new[] { new { X = (int?)1 } }.AsQueryable()
join itemB in new[] { new { X = (int?)2 } }.AsQueryable() on itemA.X equals itemB.X into itemBGroup
from itemB in itemBGroup.DefaultIfEmpty()
// ↓ IDE0031 Use null propagation
select itemB == null ? null : itemB.X;
After applying the suggested fix:
_ = from itemA in new[] { new { X = (int?)1 } }.AsQueryable()
join itemB in new[] { new { X = (int?)2 } }.AsQueryable() on itemA.X equals itemB.X into itemBGroup
from itemB in itemBGroup.DefaultIfEmpty()
// ↓↓↓↓↓↓↓↓ CS8072 An expression tree lambda may not contain a null propagating operator.
select itemB?.X;
/cc @CyrusNajmabadi