代码之家  ›  专栏  ›  技术社区  ›  Anzurio

如何在.NET中修剪数组?

  •  2
  • Anzurio  · 技术社区  · 16 年前

    假设我有一个数组

    array<double>^ buffer = gcnew array<double>(100);
    

    void foo(array<double>^% buffer)
    {
        Array::Resize(buffer, 10);
    }
    

    但这不会分配和/或移动&要修剪阵列时,缓冲区[0]。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Marc Gravell    16 年前

    .NET数组一旦创建,其大小是不可变的。你 不能 Array.Resize 已经做了你需要的一切。如果你真的不想这样做,也许可以忽略最后的元素。

    或使用 List<T> ,其中 封装 做 TrimExcess() . 用C#术语来说:

        var list = new List<int>(100);
        // prints 0/100
        Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
        list.Add(1);
        list.Add(2);
        list.Add(3);
        // prints 3/100
        Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
        list.TrimExcess();
        // prints 3/3
        Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
    
        2
  •  3
  •   thecoop    16 年前

    您不能在.NET中执行此操作。NET中的数组一旦分配就具有固定大小;更改数组大小的唯一方法是重新分配它(array.Resize就是这样做的),这将始终更改数组在内存中的位置。