如何在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
相关产品推荐
相关产品推荐

