调整类中数组的大小

时间:2016-03-10 21:48:19

标签: c# arrays

我有一个困扰我的问题。

我有一项任务,包括使用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);
    }

2 个答案:

答案 0 :(得分:5)

问题是您的测试,一旦您在Array.Resize中调用products ShouldRemoveLastProductInCart变量,cart.products中的数组cart.products中的数组不再是内存中的相同数组。

如果您检查httpServletResponse.addHeader("Access-Control-Allow-Origin", "http://192.168.1.66:8080"); 大小,则会看到正确的值1。

答案 1 :(得分:1)

你不能改变阵列。保持简单,使用Array.Copy并重新分配。

不会溢出所有豆子,但这是一个示例用法:

Array.Copy(source, target, indexToCopyUpTo);