I would like to switch to exhaustive switch in C# in .NET 8 so it will work similar way like some modern programing languages (Rust, ..), but I cannot make it work.
I try to replicate the answer here:
/a/68227845/518530
#pragma warning restore CS8509
#pragma warning disable CS8524
string SeverityToString(Severity severity)
{
switch (severity)
{
case Severity.Error:
return "Error";
case Severity.Warning:
return "Warning";
//default: // default should be automatically generated by pragmas above, isnt it?
// throw new InvalidEnumArgumentException(severity.ToString(), (int)severity, severity.GetType());
}
}
Console.WriteLine(SeverityToString(Severity.Error));
public enum Severity
{
Warning,
Error,
}
But anyway I still get compilation error, for some reasone, the compiler automatically does not generate the default statement if it should
Program.cs(5, 8): [CS0161] 'SsverityToString(Severity)': not all code paths return a value
Why it does not work? Why the default statement is not generated by compiler?