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

C#调用AddItem方法为并行数组添加元素时新值覆盖旧值问题求解

问题原因

  • AddItem方法每次执行都会把内部的count变量初始化为0,所有新数据都会固定写入数组的第0位,直接覆盖之前的内容
  • 调用AddItem时没有传递当前已经存储的元素数量logicalArraySize,方法无法判断新内容应该写入的下标位置
  • 方法返回的count每次都是1,会直接覆盖主方法中记录真实元素数量的logicalArraySize,导致计数丢失

修复方案

1. 调整Main方法中AddItem的调用逻辑

传入当前逻辑长度,并且增加数组容量校验,避免下标越界:

if (userChoice == '1')
{
    // 仅当数组未满时允许新增
    if(logicalArraySize < PHYSICAL_ARRAY_SIZE)
    {
        logicalArraySize = AddItem(menuItems, menuPrices, logicalArraySize);
    }
    else
    {
        Console.WriteLine("数组已满,无法新增更多项目");
        Console.ReadKey();
    }
}

2. 修改AddItem方法的定义和内部逻辑

新增入参接收当前已存元素数量,用该值作为新数据的写入下标:

public static int AddItem(string[] items, double[] prices, int currentCount) 
{
    double price;
    string description;

    Console.Clear();
    Console.WriteLine("New Item");
    Console.WriteLine("-----------------------------------------");
    Console.WriteLine("Enter an item to add to bill: ");
    
    string message = "Enter description: ";
    description = PromptForStringNotEmpty(message);

    Console.Write($"Enter price of {description}: ");
    price = GetSafeDouble();

    Console.WriteLine("Add Item was successful");
    Console.WriteLine("Press any key to continue...");
    Console.ReadKey();
    Console.Clear();

    // 用传入的当前计数作为写入下标
    prices[currentCount] = price; 
    items[currentCount] = description; 
    // 返回加1后的最新元素数量
    return currentCount + 1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:00