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

如何在C#固定大小数组中高效简便地增删元素?

关于C#数组动态增删元素的解决方案

Great question! Let's break this down clearly:

  • C#中的普通数组(比如你定义的string[] food)是固定长度的,一旦初始化完成,就无法直接对它进行添加或移除元素的操作。这是因为数组在内存中是一块连续的存储空间,大小在创建时就被确定了,没办法动态调整这块内存的大小。

所以如果你想把它用作可以随时添加/移除元素的库存,直接操作普通数组确实行不通——你提到的ArrayList是一种早期的解决方案,但它是非泛型集合,存在类型不安全的问题(比如可能不小心存入非string类型的元素),现在更推荐使用泛型集合List<T>,它完全满足你高效简便增删元素的需求,而且类型安全、性能更好。

用List<T>实现动态库存的示例

首先把你的数组转换成List<string>,之后就能轻松进行增删操作了:

// 把原数组转成List<string>
List<string> foodList = new List<string>(new string[] {"Bacon", "Cheese", "Patty", "Crabs"});

// 添加新元素
foodList.Add("Lettuce");
foodList.Add("Tomato");

// 移除指定元素
foodList.Remove("Crabs");

// 移除指定索引的元素
foodList.RemoveAt(0); // 移除第一个元素"Bacon"

// 如果需要再转回数组的话
string[] updatedFoodArray = foodList.ToArray();

如果非要用普通数组怎么办?

如果因为某些特殊需求必须使用数组,你只能手动创建新数组来模拟增删操作,比如:

添加元素:

string[] food = {"Bacon", "Cheese", "Patty", "Crabs"};
// 创建一个长度比原数组大1的新数组
string[] newFoodArray = new string[food.Length + 1];
// 复制原数组的所有元素到新数组
Array.Copy(food, newFoodArray, food.Length);
// 添加新元素
newFoodArray[food.Length] = "Lettuce";
// 把新数组赋值给原变量
food = newFoodArray;

移除元素:

string[] food = {"Bacon", "Cheese", "Patty", "Crabs"};
string elementToRemove = "Cheese";
// 创建一个长度比原数组小1的新数组
string[] newFoodArray = new string[food.Length - 1];
int newIndex = 0;
foreach (string item in food)
{
    if (item != elementToRemove)
    {
        newFoodArray[newIndex] = item;
        newIndex++;
    }
}
food = newFoodArray;

但这种方式非常繁琐,每次增删都要重新分配内存、复制元素,效率很低,完全不适合作为库存这类需要频繁操作的场景。

总结

如果需要一个可以动态增删元素的库存,优先使用List<T>,它是C#中专门为动态集合设计的类型,内置了各种便捷的操作方法,比普通数组和ArrayList都更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:31:26