【问题标题】:how to return to the start of a switch statement after case complete案例完成后如何返回到switch语句的开头
【发布时间】:2021-03-18 10:00:41
【问题描述】:

我在 c# 中有一个控制台应用程序,我必须在其中编辑 xml 中的数据。到目前为止,这有效,我可以通过 id 选择获得要编辑的数据集,然后编辑单个值。我想要实现的是,如果用户在编辑后给出一个特定的值,他/她应该能够后退一步并编辑同一数据集的其他值。

例如:用户编辑一个id为2的客户的名字,并希望在保存名字后更改地址。应用程序应该能够识别之前的输入,然后只提供用户可以再次更改值的选项。

我尝试在方法内调用该方法,但我的应用程序在保存新值后刚刚完成,

这是我的代码:

    bool inputTester = true;
    while (inputTester)
    {
    Console.WriteLine("Welche Seiner Daten möchten Sie verändern?");
    Console.WriteLine("1) Für Vornamen");
    Console.WriteLine("2) Für Nachnamen");
    Console.WriteLine("3) für Adresse");
    Console.WriteLine("4) für Geburtsdatum");
    Console.WriteLine("5) für Bankdaten");

 
    Console.WriteLine("Bitte geben Sie nun eine Option ein");
   
    switch (Console.ReadLine())
    {
        case "1":

            
                tgt = tempId;
                var name = tgt.Descendants("firstName").FirstOrDefault();
                Console.WriteLine("Bitte geben sie den neuen Vornamen ein");
                name.Value = Console.ReadLine();
                xDoc.Save(filepath);
                Console.WriteLine("Kunde gespeichert");
                Console.Clear();

                Console.WriteLine("Möchten Sie weitere Daten dieses Kunden bearbeiten? Falls Ja drücken Sie 1");

                    if (Console.ReadLine().Equals(1))
                    
                        break;
                        break;
                        
                    
            

我尝试在案例 1 中调用其中的方法。

编辑:我尝试使用 while 建议来执行此操作,但结果仍然相同。程序刚结束,然后自行关闭。

我将代码缩减到可以在本地尝试的最小状态。我希望像这样很好。

【问题讨论】:

  • Console.WriteLine("Bitte geben Sie nun eine Option ein"); 之前添加一段时间(true),它也必须包装开关。并且有一个想法可以打破这个循环。我会为minimal reproducible example 提供建议,而不是完整的代码箭头代码,严格的最低限度将有助于解决和澄清问题。
  • 和return 让你离开方法并且没有回头路。将 true false 存储在变量中并在最后返回。
  • 我在原始帖子中使用while循环编辑了代码,但结果仍然和以前一样......

标签: c# .net xml


【解决方案1】:

将 Switch 语句放在 While(true) 循环中,当您想回到循环的开头时,请使用:

    Continue

语句,这将再次开始循环。 当你想退出循环时,只需使用:

    Break

【讨论】:

    【解决方案2】:

    我会尽量简化你的问题,以说明你犯的错误。

    要求是: 程序将要求输入“1”或“2”并将其相加,直到您放弃并输入“Stop”。

    你的尝试看起来像这样:它不会循环并且只询问一次。

    static int Count_Original()
    {
        var num = 0;
    
        Console.WriteLine("Original: How Many? (1/2)");
        switch (Console.ReadLine())
        {
            case "1":
                num += 1;
                return num;
    
            case "2":
                num += 2;
                return num;
        }
        return num;
    }
    

    如果我们有一个循环:它仍然不会循环,因为返回使我们退出该方法。

    static int Count_Loop()
    {
        var num = 0;
        while (true)
        {
            Console.WriteLine("Loop: How Many? (1/2)");
            switch (Console.ReadLine())
            {
                case "1":
                    num += 1;
                    return num;
    
                case "2":
                    num += 2;
                    return num;
            }
            return num;
        }
    }
    

    简单地删除 return 并不能解决它,我们现在陷入了循环中。

    static int Count_Trap()
    {
        var num = 0;
    
        while (true)
        {
            Console.WriteLine("Trap: How Many? (1/2)");
            switch (Console.ReadLine())
            {
                case "1":
                    num += 1;
                    break;
    
                case "2":
                    num += 2;
                    break;
    
                default: // I didn't understand the input. Let me ask again.
                    break;
            }
        };
        return num; // Never reach
    }
    

    最终版本将如下所示:

    • 使用返回的突破选项
    • 默认值,以防我们没有输入有效选项。
    static int Count_Fix()
    {
        var num = 0;
    
        while (true)
        {
            Console.WriteLine("Fix: How Many? (1/2)");
            switch (Console.ReadLine())
            {
                case "Stop": // Breakout condition, we are leaving
                    return num;
    
                case "1":
                    num += 1;
                    break;
    
                case "2":
                    num += 2;
                    break;
    
                default: // I didn't understand the input. Let me ask again.
                    break;
            }
        };
        return num;
    }
    

    最后,如果您不想有条件循环返回或退出,您可以使用 if/else:

    static int Count_Fix()
    {
        var num = 0;
    
        while (true)
        {
            Console.WriteLine("Fix: How Many? (1/2)");
            switch (Console.ReadLine())
            {
    
                case "1":
                    num += 1;
                    break;
    
                case "2":
                    num += 2;
                    if (num % 2 == 0) break; // conditional go back or exit
                    else return num; // exit
    
                default: // I didn't understand the input. Let me ask again.
                    break;
            }
        };
    }
    

    【讨论】:

    • 嘿,我现在用中断编辑了我的代码,但如果我理解正确,你会给出一个用户可以停止循环的情况。但我想要的是在这个案例 1 中决定他是否应该回到循环/切换的开始。但我仍然坚持刚刚完成的应用程序。
    • 好的,如何让停止选项仅对添加号码有效。这种变化足以说明条件循环吗?
    • 我想我知道如何让它停止,哈哈,我似乎无法让它回到它说的地方: Console.WriteLine("Bitte geben Sie nun eine Option ein");
    • 我添加了一个没有离开选项的块。所有案例都具有意义和影响。为了留下一个必须选择2并以奇数结尾。我认为应该很清楚以适应您的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2010-10-23
    • 2014-01-03
    • 2022-10-01
    相关资源
    最近更新 更多