You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#循环中使用Switch语句?代码问题排查求助

问题解决:循环中Switch语句无法正常执行的原因及修复方案

核心问题分析

你的代码存在两个关键逻辑错误,导致Switch语句无法正常触发:

  • 重复读取输入:连续调用两次Console.ReadLine(),第一次输入存入instruments,第二次存入action,后续的if (action == instruments)判断要求你连续输入两次完全相同的内容才会执行Switch,这和“输入一次乐器名返回信息”的需求完全不符。
  • 退出逻辑错位:只有当第二次输入为"Quit"时才会退出程序,不符合用户“输入一次即可完成操作”的预期。

修复方案

基础修复版(保留原有Switch结构)

只读取一次输入,移除多余的判断逻辑,直接基于输入值执行Switch或退出操作:

static void Main(string[] args)
{
    var repeat = true;
    while(repeat)
    { 
        Console.WriteLine("Hello. Which instrument would you like to review? Type Quit to exit the program.");

        // 仅读取一次用户输入
        string input = Console.ReadLine();

        // 优先处理退出逻辑
        if (input.Equals("Quit", StringComparison.OrdinalIgnoreCase))
        {
            repeat = false;
            continue;
        }

        // 直接使用输入值执行Switch
        switch (input)
        {
            case "Jazzmaster":
                string jazzmasterMake = "Fender";
                string jazzmasterModel = "Jazzmaster";
                string jazzmasterType = "guitar";
                string jazzmasterCountry = "Japan";
                int jazzmasterYear = 1997;
                string jazzmasterSerial = "A019459";
                string jazzmasterColor = "Sunburst";

                Console.WriteLine($"Your {jazzmasterMake} {jazzmasterModel} is a {jazzmasterType} made in {jazzmasterCountry} in {jazzmasterYear} in a {jazzmasterColor} color and with a serial number of {jazzmasterSerial}.");
                break;

            case "Jaguar":
                string jaguarMake = "Fender";
                string jaguarModel = "Jaguar";
                string jaguarType = "guitar";
                string jaguarCountry = "Japan";
                int jaguarYear = 1997;
                string jaguarSerial = "A035931";
                string jaguarColor = "White";

                Console.WriteLine($"Your {jaguarMake} {jaguarModel} is a {jaguarType} made in {jaguarCountry} in {jaguarYear} in a {jaguarColor} color and with a serial number of {jaguarSerial}.");
                break;

            case "Stratocaster":
                string stratocasterMake = "Fender";
                string stratocasterModel = "Stratocaster";
                string stratocasterType = "guitar";
                string stratocasterCounty = "USA";
                int stratocasterYear = 2018;
                string stratocasterSerial = "US18004688";
                string stratocasterColor = "Black";

                Console.WriteLine($"Your {stratocasterMake} {stratocasterModel} is a {stratocasterType} made in {stratocasterCounty} in {stratocasterYear} in a {stratocasterColor} color and with a serial number of {stratocasterSerial}.");
                break;

            default:
                Console.WriteLine("That instrument is not in your collection.");
                break;
        }
    }
}

优化版(用类封装数据,简化代码)

通过定义乐器类和字典存储数据,减少重复代码,同时支持大小写不敏感的输入匹配:

// 封装乐器数据的类
public class Instrument
{
    public string Make { get; set; }
    public string Model { get; set; }
    public string Type { get; set; }
    public string Country { get; set; }
    public int Year { get; set; }
    public string Serial { get; set; }
    public string Color { get; set; }
}

static void Main(string[] args)
{
    // 初始化乐器集合,支持大小写不敏感匹配
    var instrumentCollection = new Dictionary<string, Instrument>(StringComparer.OrdinalIgnoreCase)
    {
        ["Jazzmaster"] = new Instrument 
        { 
            Make = "Fender", Model = "Jazzmaster", Type = "guitar", 
            Country = "Japan", Year = 1997, Serial = "A019459", Color = "Sunburst" 
        },
        ["Jaguar"] = new Instrument 
        { 
            Make = "Fender", Model = "Jaguar", Type = "guitar", 
            Country = "Japan", Year = 1997, Serial = "A035931", Color = "White" 
        },
        ["Stratocaster"] = new Instrument 
        { 
            Make = "Fender", Model = "Stratocaster", Type = "guitar", 
            Country = "USA", Year = 2018, Serial = "US18004688", Color = "Black" 
        }
    };

    var repeat = true;
    while(repeat)
    { 
        Console.WriteLine("Hello. Which instrument would you like to review? Type Quit to exit the program.");

        string input = Console.ReadLine();

        if (input.Equals("Quit", StringComparison.OrdinalIgnoreCase))
        {
            repeat = false;
            continue;
        }

        // 从集合中查找乐器
        if (instrumentCollection.TryGetValue(input, out var instrument))
        {
            Console.WriteLine($"Your {instrument.Make} {instrument.Model} is a {instrument.Type} made in {instrument.Country} in {instrument.Year} in a {instrument.Color} color and with a serial number of {instrument.Serial}.");
        }
        else
        {
            Console.WriteLine("That instrument is not in your collection.");
        }
    }
}

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:51:34