Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Có thể resize mảng trong C# không?


Câu trả lời ngắn

Không thể resize mảng trực tiếp vì mảng C# có kích thước cố định (fixed-size) khi khởi tạo. Tuy nhiên, có thể thay thế mảng bằng mảng mới kích thước khác dùng Array.Resize<T>(ref array, newSize).

Ví dụ Array.Resize

char[] ch = new char[10];
ch[0] = 'a'; ch[1] = 'b';
Array.Resize(ref ch, 10); // Thay thế bằng mảng mới size 10
ch[2] = 'c'; ch[3] = 'd'; ... ch[9] = 'j';

Ví dụ hoàn chỉnh

using System;

class Program
{
    static void Main()
    {
        char[] ch = new char[10];
        ch[0] = 'a'; ch[1] = 'b';
        Array.Resize(ref ch, 10);
        for (int i = 2; i < 10; i++) ch[i] = (char)('c' + i - 2);
        Console.WriteLine("New Array: " + new string(ch));
    }
}

Kết quả

New Array: abcdefghij

Giải thích cơ chế

  1. Cấp phát mảng mới char[newSize].
  2. Copy Min(old.Length, newSize) phần tử từ mảng cũ sang mới.
  3. Gán tham chiếu mảng mới cho biến ch (qua ref).
  4. Mảng cũ bị GC thu gom nếu không còn tham chiếu khác.

Các phương án thay thế

Phương ánƯu điểmNhược điểm
List<T>Tự động mở rộng, API phong phúOverhead nhỏ, không phải mảng
Array.ResizeGiữ kiểu T[], tương thích API cũO(n) copy, cấp phát mới
Array.Copy manualKiểm soát chính xácVerbose, dễ sai
Span/Memory (.NET Core)Zero-allocation sliceKhông thay đổi kích thước mảng gốc

Best Practice

  • Mặc định dùng List<T> cho collection động.
  • Chỉ dùng Array.Resize khi bắt buộc phải có mảng (T[]).
  • Tránh Resize trong vòng lặp hot path (tốn GC pressure).