控制台应用中如何将用户选择的货币传递给产品展示函数
解决方案:保存并传递用户选择的货币类型
核心处理逻辑
- 持久化货币选择:把货币变量从局部变量升级为Worker类的字段,默认值设为"USD",确保循环全程能保留用户的选择。
- 传递货币参数:修改产品展示方法,让它们接收货币类型参数;或者给
_productListVisualizer添加CurrentCurrency属性,设置后内部方法自动使用该货币。 - 转换输入为有效货币标识:将用户按键输入转为对应的货币代码,确保后续方法能正确识别。
修改后的完整代码示例
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
相关产品推荐
相关产品推荐

