public static double ComputeArea(object shape) {
switch (shape) {
case Square s:
return s.Side * s.Side;
case Circle c:
return c.Radius * c.Radius * Math.PI;
case Rectangle r:
return r.Height * r.Length;
default:
throw new ArgumentException(
message: "shape is not recognized",
paramName: nameof(shape));
}
}
The when clause can be used to deal with special cases (e.g. to avoid division by 0 when a dimension is 0).