3 ms·
> Well, let's say Line, Rectangle, and Circle are reference types. > Which case does null match? None of them, it should be a case on its own: var area =
by louthy 10y ago
> Well, let's say Line, Rectangle, and Circle are reference types.
> Which case does null match?
None of them, it should be a case on its own:
var area = switch(shape)
{
case Line l => 0;
case Rectangle r => r.Width * r.Height;
case Circle c => Math.PI * c.Radius * c.Radius;
case null => throw new ArgumentNullException();
}
That would allow for completeness checking, and if you do want a catch-all then you'd add a default clause.
I have since looked at the proposal for the expression based switch. TBH, I'll just be happy when it's in the language, the syntax is less important to me; but I am not quite sure it needed such a drastic change - it does feel a touch awkward.
> The match expression, however, I want to be more like ML where you can get strong guarantees on the "irrefutability" of a match.
Music to my ears.