【问题标题】:Using enum as a variable (?) [duplicate]使用枚举作为变量(?)[重复]
【发布时间】:2020-05-24 07:57:24
【问题描述】:

我对控制台中的一些简单代码有疑问。准确地说,我创建了一个名为Yearpublic enum,其中包含4 个季节(很明显)。我希望程序在开始时询问一年中的季节是什么,然后为每个选项生成一个答案。问题是我不知道如何将我的字符串输入转换为这个枚举的每个选项。如果我向您展示代码(很短),也许会更清楚。

            Console.WriteLine("What time of year is it?");
        var input = Console.ReadLine();

            //earlier it was just
            //time = Year.Winter;

        switch (time)
        {
            case Year.Autumn:
                Console.WriteLine("You're gonna have to grab the leaves");
                break;

            case Year.Summer:
                Console.WriteLine("Let's go to the beach");
                break;

            case Year.Winter:
                Console.WriteLine("Better to warm up at home");
                break;
            case Year.Spring:
                Console.WriteLine("Best time of the year!");
                break;

            default:
                Console.WriteLine("I don't know this time of year");
                break;
        }

我想做这样的事情,但不知道在这个 switch 语句中放什么,因为我不能只放我的字符串“输入”。有没有可能按照我的想法?

【问题讨论】:

    标签: c# enums console switch-statement


    【解决方案1】:

    您可以尝试使用Enum 类之一将字符串解析为Enum

    特别是,您可以在此使用类型化方法TryParse

    var ignoreCase = true; // decide this
    if (Enum.TryParse<MyEnum>("my string", ignoreCase, out var r))
        // use r
    else
        Console.WriteLine("Please enter the correct value.");
    

    【讨论】:

      【解决方案2】:

      你可以在 switch 语句之前使用 string contains() 函数,如下所示我没有测试它是否像这样(嵌套)工作,如果不是你必须使用 if 和 else if 条件

      time = input.Trim().Contains("winter") ? Year.Winter: (input.Trim().Contains("summer") ?Year.Summer :(input.Trim().Contains("autumn") ?Year.Autumn:i(nput.Trim().Contains("autumn") ?Year.Autumn: null)));
      

      您可以做的另一件事是给用户选项,例如 1 Year.Autumn,2 Year.Summer,3 Year.Winter,4 Year.Spring 并获得一个可以使用 switch 语句的数字

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-17
        • 1970-01-01
        • 2019-12-02
        • 2012-08-31
        • 2017-04-19
        • 1970-01-01
        相关资源
        最近更新 更多