c# - 如何在不使用 C# 中的 System.Collection 或 LINQ 的情况下从数组中删除元素?

标签 c# arrays

我在 C# 中从数组中“删除”元素时遇到问题,但没有使用 System.Collection 和 LINQ

例如:

我有一个 Product 类,其中包含字段 p_namep_numberis_useful(此值为 true 默认情况下);

我还有一个 ShoppingCart 类,它包含字段 market_nameproducts_quantityProducts(类型是 Product[],存储所有产品)

假设我创建了四个 Product 对象 p1p2p3p4,然后创建一个 ShoppingCart 对象 sc,其长度是固定的 Products[4] ( p1, p2, p3 & p4 都存储在里面);

然后我将 p2is_useful 值设置为 false,所以 Products 中的 p2 [4] 将对 ShoppingCart 无用,需要从 Products[4] 中删除。

是否可以从 Products[4] 中删除 p2,并且此数组的长度将减少到 3 (Products[3]p1, p3 & p4 里面),它仍然属于 Shoppingcart 对象 sc(比如当我使用 sc.Products 获取所有产品时,它会引用新的 Products[3])?

谢谢!

最佳答案

使用Array.Resize静态方法:

  • 用最后一个替换你想删除的元素
  • 调用 Array.Resize 并将您的数组引用和长度设置为当前长度 - 1
// let's say you'd like to remove the i-th element
//
// You don't have to move Products[i] to the last position,
// because it will be removed anyway.
sc.Products[i] = sc.Products[sc.Products.Length - 1];
// Call Array.Resize to change array size
Array.Resize(sc.Products, sc.Products.Length - 1);

关于c# - 如何在不使用 C# 中的 System.Collection 或 LINQ 的情况下从数组中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684129/

相关文章:

java - 消除Java排序比较中的越界错误

c - 简单数组索引失败

java - 在 C# 中验证 RSA SHA256 签名

java - Android 使用 Arrays.asList 方法创建不正确的数组列表

c# - 更改无线网络适配器无线模式属性

c# - 如何使用 MysqlDataReader 运行多个查询

c -++i 在 while 循环中只改变一次

java - 将数组列表的数组列表转换为数组?

c# - 使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性

c# - 我可以更改默认配置文件吗?