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

控制台应用中如何将用户选择的货币传递给产品展示函数

解决方案:保存并传递用户选择的货币类型

核心处理逻辑

  1. 持久化货币选择:把货币变量从局部变量升级为Worker类的字段,默认值设为"USD",确保循环全程能保留用户的选择。
  2. 传递货币参数:修改产品展示方法,让它们接收货币类型参数;或者给_productListVisualizer添加CurrentCurrency属性,设置后内部方法自动使用该货币。
  3. 转换输入为有效货币标识:将用户按键输入转为对应的货币代码,确保后续方法能正确识别。

修改后的完整代码示例

public class Worker : BackgroundService
{
    // 类级别字段存储选中的货币,默认USD
    private string _selectedCurrency = "USD";

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        var shouldRun = true;
        DisplayOptions();
        
        while (shouldRun)
        {
            Console.Write("Enter an option: ");
            var input = Console.ReadKey();
            Console.WriteLine();

            switch (input.Key)
            {
                case ConsoleKey.NumPad1:
                case ConsoleKey.D1:
                    Console.WriteLine("Printing all products");
                    // 传递选中的货币给展示方法
                    _productListVisualizer.OutputAllProduct(_selectedCurrency);
                    break;
                case ConsoleKey.NumPad2:
                case ConsoleKey.D2:
                    Console.WriteLine("Printing paginated products");
                    _productListVisualizer.OutputPaginatedProducts(_selectedCurrency);
                    break;
                case ConsoleKey.NumPad3:
                case ConsoleKey.D3:
                    Console.WriteLine("Printing products grouped by price");
                    _productListVisualizer.OutputProductGroupedByPriceSegment(_selectedCurrency);
                    break;
                case ConsoleKey.NumPad4:
                case ConsoleKey.D4:
                    Console.WriteLine("Printing available currencies.");
                    _productListVisualizer.GetListofCurrencies();
                    
                    Console.Write("Select Currency. Default is USD. : ");
                    var currencyInput = Console.ReadKey();
                    Console.WriteLine();
                    
                    // 根据实际货币选项转换输入,示例:1=USD,2=EUR,3=GBP
                    _selectedCurrency = currencyInput.Key switch
                    {
                        ConsoleKey.D1 or ConsoleKey.NumPad1 => "USD",
                        ConsoleKey.D2 or ConsoleKey.NumPad2 => "EUR",
                        ConsoleKey.D3 or ConsoleKey.NumPad3 => "GBP",
                        _ => "USD" // 无效输入默认USD
                    };
                    Console.WriteLine($"Currency set to {_selectedCurrency}");
                    break;
                case ConsoleKey.Q:
                    shouldRun = false;
                    break;
                default:
                    Console.WriteLine("Invalid option!");
                    break;
            }

            Console.WriteLine();
            DisplayOptions();
        }

        Console.Write("\nPress any key to exit!");
        Console.ReadKey();

        await _host.StopAsync(stoppingToken);
    }

    private static void DisplayOptions()
    {
        Console.WriteLine("Choose an option:");
        Console.WriteLine("1 - Print all products");
        Console.WriteLine("2 - Print paginated products");
        Console.WriteLine("3 - Print products grouped by price");
        Console.WriteLine("4 - Change Currency.");
        Console.WriteLine("q - Quit");
    }
}

可选优化方向

  • 若不想修改展示方法的参数,可给_productListVisualizer添加SetCurrentCurrency(string currency)方法,或直接设置其CurrentCurrency属性,后续调用展示方法时内部自动使用该值。
  • 如果货币选项较多,可改用Console.ReadLine()让用户直接输入货币代码,比按键选择更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:05:15