2009-11-27 38 views
7

Tôi có một mảng int. Họ bắt đầu với 0, sau đó họ được làm đầy với một số giá trị. Sau đó, tôi muốn thiết lập tất cả các giá trị trở lại 0 để tôi có thể sử dụng lại nó, hoặc người nào khác chỉ cần xóa toàn bộ mảng để tôi có thể redeclare nó và bắt đầu với một mảng của tất cả 0s.Cách xóa một mảng trong Visual C#

+0

trùng lặp có thể xảy ra http://stackoverflow.com/questions/1407715/how -to-quick-zero-out-an-array –

Trả lời

28

Bạn có thể gọi Array.Clear:

int[] x = new int[10]; 
for (int i = 0; i < 10; i++) 
{ 
    x[i] = 5; 
} 
Array.Clear(x, 0, x.Length); 

Ngoài ra, tùy thuộc vào tình hình, bạn có thể tìm thấy nó rõ ràng hơn để chỉ cần tạo một mảng mới để thay thế. Đặc biệt, sau đó bạn không cần phải lo lắng về việc liệu một số mã khác vẫn còn có một tham chiếu đến mảng và hy vọng các giá trị cũ sẽ có.

Tôi không thể nhớ khi gọi Array.Clear bằng mã của riêng mình - đó không phải là thứ tôi cần.

(Tất nhiên, nếu bạn sắp thay thế tất cả các giá trị dù sao, bạn có thể làm điều đó mà không cần thanh toán bù trừ mảng đầu tiên.)

+2

Bất kỳ mảng nào cũng thực hiện giao diện *** không chính xác *** 'IList' có phương thức' Xóa'. Nói '((IList) x) .Clear();' cũng "xóa" thể hiện mảng, mặc dù điều này không tốt [tài liệu] (http://msdn.microsoft.com/en-us/library/bb340970.aspx). Nếu mảng thực sự là một chiều và không được lập chỉ mục, nó cũng "kỳ diệu" thực hiện giao diện 'IList <>' chung có * phương thức * khác cũng được gọi là 'Xóa'. Nếu bạn nói '((IList ) x) .Clear();' bạn nhận được một ngoại lệ thời gian chạy! Đó là một sự tinh tế mà hai triển khai giao diện rõ ràng trong 'Mảng' hoạt động khác nhau. –

+0

Cảm ơn bạn đã bình luận về một số mã có tham chiếu đến mảng! Làm s1 = s2; và Array.Clear (s2, 0, s2.Length), nó đã cho tôi thời gian trước khi nhận ra những gì tôi đã làm. Cảm ơn! – Gyfis

Các vấn đề liên quan