dotnet/roslyn
Suboptimal code for matching nullable value to constant pattern
Aperta
#42.912 aperta il 30 mar 2020
Area-CompilersCode Gen QualityFeature - Pattern MatchingFeature Requesthelp wanted
Metriche repository
- Star
- (20.414 stelle)
- Metriche merge PR
- (Merge medio 6g 17h) (256 PR mergiate in 30 g)
Descrizione
This issue is extracted from https://github.com/dotnet/roslyn/issues/31494
For source
static class Program
{
public static bool IsActual(int? x) => x is 1;
public static bool IsExpected(int? x) => x == 1;
}
The generated code is
internal static class Program
{
public static bool IsActual(int? x)
{
if (x.HasValue)
{
return x.GetValueOrDefault() == 1;
}
return false;
}
public static bool IsExpected(int? x)
{
int? num = x;
int num2 = 1;
return (num.GetValueOrDefault() == num2) & num.HasValue;
}
}
The point is that we optimized == to avoid control-flow. We should do the same for the pattern-matching operations.