Programming against an enum in a switch statement, is this your way to do?

前端 未结 12 2301
青春惊慌失措
青春惊慌失措 2020-12-24 09:15

Look at the code snippet:

This is what I normally do when coding against an enum. I have a default escape with an InvalidOperationException (I do not use ArgumentExc

12条回答
  •  孤城傲影
    2020-12-24 10:11

    There's an alternative to this, which is to use something similar to Java's enums. Private nested types allow for a "stricter" enum where the only "invalid" value available at compile-time is null. Here's an example:

    using System;
    
    public abstract class DrivingState
    {
        public static readonly DrivingState Neutral = new NeutralState();
        public static readonly DrivingState Drive = new DriveState();
        public static readonly DrivingState Parking = new ParkingState();
        public static readonly DrivingState Reverse = new ReverseState();
    
        // Only nested classes can derive from this
        private DrivingState() {}
    
        public abstract void Go();
    
        private class NeutralState : DrivingState
        {
            public override void Go()
            {
                Console.WriteLine("Not going anywhere...");
            }
        }
    
        private class DriveState : DrivingState
        {
            public override void Go()
            {
                Console.WriteLine("Cruising...");
            }
        }
    
        private class ParkingState : DrivingState
        {
            public override void Go()
            {
                Console.WriteLine("Can't drive with the handbrake on...");
            }
        }
    
        private class ReverseState : DrivingState
        {
            public override void Go()
            {
                Console.WriteLine("Watch out behind me!");
            }
        }
    }
    

提交回复
热议问题