C#enum拼写纠错

Wor*_*ind 4 c# enums

我确信每个人在开发过程中都会在某处发生错字,并在发布后意识到这一点.好吧,我遇到了同样的问题,除了这个问题存在于Enum选项中.

我在C#中有一个如下所示的枚举定义

    public enum SlideShowZoomEffect
    {
        NoEffect,
        ZoomIn,
        ZoonOut
    }
Run Code Online (Sandbox Code Playgroud)

最近,在产品发布后,我们意识到ZoonOut有一个错字(它应该是ZoomOut).我们想要更改它,但它将作为字符串保存到数据库中(因此它保存为ZoonOut)并且程序将通过调用enum.parse(...)重新构建枚举,这允许我们在程序中将其用作枚举.

这里的问题是,一旦我们将ZoonOut更改为ZoomOut,是否有任何方法可以向后兼容,以便(字符串)ZoonOut和(字符串)ZoomOut将被解析为(枚举)ZoomOut?

任何建议都会很棒!

谢谢


更新(此问题的解决方案):

下面接受回答,这是我的测试代码,以显示对此接受的解决方案的影响,以供将来参考.谢谢你们

class Program
{
    static void Main(string[] args)
    {
        //Testing input as (string)ZoomOut
        Console.WriteLine("Testing #1: Input String = 'ZoomOut'");
        TestCase("ZoomOut");
        Console.WriteLine("\n\n\n");


        //Testing input as (string)ZoonOut
        Console.WriteLine("Testing #2: Input String = 'ZoonOut'");
        TestCase("ZoonOut");
        Console.WriteLine("\n\n\n");


        //Additional testing to ensure the TestCase function is working, we should see something else detected here
        Console.WriteLine("Testing #3: Input String = 'ZoomIn'");
        TestCase("ZoomIn");
    }


    static void TestCase(string inputString)
    {
        SlideShowZoomEffect enumInput = (SlideShowZoomEffect)Enum.Parse(typeof(SlideShowZoomEffect), inputString);

        Console.WriteLine("enumInput.tostring() = " + enumInput.ToString());


        Console.WriteLine("\n===> using case SlideShowZoomEffect.ZoonOut:");
        switch (enumInput)
        {
            case SlideShowZoomEffect.ZoonOut:
                Console.WriteLine("      ===> ZoomOut detected");
                break;

            default:
                Console.WriteLine("      ===> Something else detected");
                break;
        }



        Console.WriteLine("\n===> using case SlideShowZoomEffect.ZoomOut:");
        switch (enumInput)
        {
            case SlideShowZoomEffect.ZoomOut:
                Console.WriteLine("      ===> ZoomOut detected");
                break;

            default:
                Console.WriteLine("      ===> Something else detected");
                break;
        }
    }


    public enum SlideShowZoomEffect
    {
        NoEffect,
        ZoomIn,
        ZoomOut,
        ZoonOut = ZoomOut
    }
}
Run Code Online (Sandbox Code Playgroud)

这是控制台的输出

Testing #1: Input String = 'ZoomOut'
enumInput.tostring() = ZoomOut

===> using case SlideShowZoomEffect.ZoonOut:
      ===> ZoomOut detected

===> using case SlideShowZoomEffect.ZoomOut:
      ===> ZoomOut detected




Testing #2: Input String = 'ZoonOut'
enumInput.tostring() = ZoomOut

===> using case SlideShowZoomEffect.ZoonOut:
      ===> ZoomOut detected

===> using case SlideShowZoomEffect.ZoomOut:
      ===> ZoomOut detected




Testing #3: Input String = 'ZoomIn'
enumInput.tostring() = ZoomIn

===> using case SlideShowZoomEffect.ZoonOut:
      ===> Something else detected

===> using case SlideShowZoomEffect.ZoomOut:
      ===> Something else detected
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)

Bas*_*Bas 9

Alioza方法的替代答案:

update TableX set MyEnumField = 'ZoomOut' where MyEnumField = 'ZoonOut'
Run Code Online (Sandbox Code Playgroud)

在修补产品时运行它;)


Ali*_*oza 5

这应该工作:

  public enum SlideShowZoomEffect
    {
        NoEffect,
        ZoomIn,
        ZoomOut,
        ZoonOut = ZoomOut

    }
Run Code Online (Sandbox Code Playgroud)

编辑:你最安全的赌注是使用@Bas的建议.