如何在C#中获取用户任意数量输入并传入params方法?
如何将用户输入内容转为params参数传入方法?
我们可以用params关键字给方法传入任意数量的参数,示例代码如下:
static int sumPrices(params int[] prices) { int sum = 0; for (int i = 0; i < prices.Length; i++) { sum += prices[i]; } return sum; } static void Main(string[] args) { int total = sumPrices(100, 50, 200, 350); Console.WriteLine(total); Console.ReadKey(); }
但如果想让100, 50, 200, 350这些参数来自用户输入而非编码时硬传,该怎么做?
目前我通过传递数组的方式实现了需求,但代码冗长还存在输入数量限制:
static int sumPrices(int[] prices) { int sum = 0; for (int i = 0; i < prices.Length; i++) { sum += prices[i]; } return sum; } static void Main(string[] args) { //get up to 9999 inputs and sum them using a method bool whileLoop = true; int[] inputs = new int[9999]; int index = 0; while (whileLoop == true) { Console.WriteLine("entering price #" + index + ", type 'stop' to sum prices"); string check = Console.ReadLine(); if (check == "stop") { whileLoop = false; break; } inputs[index] = int.Parse(check); index++; } int[] prices = new int[index]; for (int i = 0; i < index; i++) { prices[i] = inputs[i]; } Console.WriteLine("-----------------"); Console.WriteLine(sumPrices(prices)); Console.ReadKey(); }
教授要求使用第一种带params的方法形式,但我不知道在未知用户输入的场景下该怎么应用。我设想让用户输入逗号分隔的内容(如100,200,50),再把它转成params参数传入sumPrices方法,但这是字符串格式,想问C#里有没有类似JS的JSON.parse的方法实现?
解决方案:解析逗号分隔字符串为数组,直接传入params方法
其实不用JSON.parse,直接对用户输入的字符串做拆分和类型转换就行——params本质是语法糖,底层依然接收数组,所以直接传入转换后的数组就能适配带params的方法。具体步骤如下:
- 提示用户输入逗号分隔的数字
- 拆分字符串为单个数字字符串(同时处理可能的空格)
- 转换为int数组
- 直接传入带
params的sumPrices方法
示例代码:
static int sumPrices(params int[] prices) { int sum = 0; foreach (int price in prices) { sum += price; } return sum; } static void Main(string[] args) { Console.WriteLine("请输入逗号分隔的价格(如:100,200,50):"); string input = Console.ReadLine(); // 拆分字符串,同时过滤空项和空格分隔的内容 string[] priceStrings = input.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); // 批量转换为int数组 int[] prices = Array.ConvertAll(priceStrings, int.Parse); // 直接传入params方法 int total = sumPrices(prices); Console.WriteLine($"总价:{total}"); Console.ReadKey(); }
补充:处理无效输入的情况
如果要避免用户输入非数字导致程序报错,可以用int.TryParse做合法性校验:
List<int> validPrices = new List<int>(); foreach (string s in priceStrings) { if (int.TryParse(s, out int price)) { validPrices.Add(price); } else { Console.WriteLine($"忽略无效输入:{s}"); } } int total = sumPrices(validPrices.ToArray());
内容的提问来源于stack exchange,提问作者dexondm
相关产品推荐
相关产品推荐

