【问题标题】:Resizing an array within a class调整类中的数组大小
【发布时间】:2016-03-10 21:48:19
【问题描述】:

我有一个问题一直困扰着我。

我有一个任务要做,其中涉及使用 OOP 创建一个执行多项任务的程序。

任务是使用单独的类创建购物车,其中一项任务是从类中删除一项。

我是这样设置的。

产品类别是:

class Product
{
    private string name;
    private decimal price;

    public Product(string name, decimal price)
    {
        this.name = name;
        this.price = price;
    }

购物车类是:

class ShoppingCart
{
    private Product[] products;

    public ShoppingCart(Product[] products)
    {
        this.products = products;
    }

要删除最后一项,我在 ShoppingCart 类中尝试这样做。

public void RemoveLastProductFromCart()
{
   Array.Resize(ref products, products.Length - 1);
}

但它没有调整 Product[] 产品的大小,我找不到其他方法。我必须使用数组,因为我们还没有得到列表。

编辑: 这是我必须检查调整大小是否有效的测试,并且调用了该函数:

        [TestMethod]
    public void ShouldRemoveLastProductInCart()
    {
        Product[] products =
        {
          new Product("Milk", 12.10m),
          new Product("Meat", 14.15m)
        };

        ShoppingCart cart = new ShoppingCart(products);
        cart.RemoveLastProductFromCart();
        Assert.AreEqual(1, products.Length);
    }

【问题讨论】:

  • 数组根据定义是固定长度的,不是吗?您可以编写一个返回另一个数组的方法,该数组包含前一个数组的剩余项
  • 使用List<Product> 代替数组....
  • @Eser 阅读帖子。他必须为这个任务使用一个数组
  • @ScottChamberlain 我必须使用数组。我非常想使用 List,但还不允许。
  • 它很脏,但您可以创建一个新数组并将初始数组的内容复制到新的较短数组中。

标签: c# arrays


【解决方案1】:

问题在于你的测试,一旦你调用了Array.Resize数组,ShouldRemoveLastProductInCart中的products变量和cart.products中的数组就不再是内存中的同一个数组了。

如果您对cart.products size 进行了测试检查,您会看到正确的值 1。

【讨论】:

  • 该死的。我真的没有看到。非常感谢。现在可以使用了。
猜你喜欢
  • 2016-05-02
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2021-10-01
相关资源
最近更新 更多