如何在.NET中修剪数组?

时间:2009-11-17 19:56:06

标签: .net vb.net visual-c++ c++-cli

说我有一个数组

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

我想要一个像以下那样的函数:

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

但是当你想修剪数组时,它不会分配和/或移动&amp; buffer [0]。

2 个答案:

答案 0 :(得分:5)

一旦创建,.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);

答案 1 :(得分:3)

你不能在.NET中这样做。 .NET中的数组一旦分配就具有固定大小;你可以改变数组大小的唯一方法是重新分配它(这就是Array.Resize所做的),这将不可避免地改变数组在内存中的位置。