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

如何在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的方法。具体步骤如下:

  1. 提示用户输入逗号分隔的数字
  2. 拆分字符串为单个数字字符串(同时处理可能的空格)
  3. 转换为int数组
  4. 直接传入带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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:05:24