2010-03-22 35 views
6

Tôi đang cố tạo một mảng động trong C# nhưng tôi nhận được thông báo lỗi gây phiền nhiễu. Dưới đây là mã của tôi:Không thể tạo một mảng trong C#

private void Form1_Load(object sender, EventArgs e) 
    { 
     int[] dataArray; 
     Random random = new Random(); 
     for (int i = 0; i < random.Next(1, 10); i++) 
     { 
      dataArray[i] = random.Next(1, 1000); 
     } 
    } 

Và các lỗi:

Use of unassigned local variable 'dataArray' 

này chỉ là baffling tâm trí của tôi. Tôi đến từ VB, xin hãy nhẹ nhàng, lol.

Chúc mừng.

Trả lời

25

Bạn chưa tạo mảng - bạn đã khai báo biến, nhưng không cho nó một giá trị.

Lưu ý rằng mảng luôn có kích thước cố định. Nếu bạn muốn có cấu trúc dữ liệu mà bạn có thể tiếp tục thêm vào, bạn nên sử dụng List<T>. Tuy nhiên, tôi khuyên bạn nên làm việc với kích thước một lần thay vì trên mỗi lần lặp qua vòng lặp. Ví dụ:

private void Form1_Load(object sender, EventArgs e) 
{ 
    List<T> dataArray = new List<T>(); 
    Random random = new Random(); 
    int size = random.Next(1, 10); 
    for (int i = 0; i < size; i++) 
    { 
     dataArray.Add(random.Next(1, 1000)); 
    } 
} 

Dĩ nhiên nếu bạn đang làm việc với khổ giấy trước, bạn có thể sử dụng một mảng sau khi tất cả:

private void Form1_Load(object sender, EventArgs e) 
{ 
    Random random = new Random(); 
    int size = random.Next(1, 10); 
    int[] dataArray = new int[size]; 
    for (int i = 0; i < size; i++) 
    { 
     dataArray[i] = random.Next(1, 1000); 
    } 
} 

... nhưng lưu ý rằng mảng là considered somewhat harmful.

+0

tôi là 1/2 thông qua câu trả lời của tôi khi tôi nhận thấy điều này. Đây là câu trả lời hay nhất. Cũng như một giải pháp thay thế khác, bạn có thể sử dụng ArrayList thay cho Danh sách . Tuy nhiên, Danh sách là sự lựa chọn tốt nhất nếu chỉ ints đang đi vào mảng. – galford13x

+0

Và cũng có thể, khi sử dụng 'Danh sách 'thường có thể gợi ý về công suất ban đầu mà làm cho việc thêm các mục vào danh sách nhanh hơn. –

+0

ArrayList không được khuyến khích vì chúng ta có generics trong .NET 2.0+. Boxing và unboxing khiến ArrayList trở thành một lựa chọn tồi. –

1

Bạn phải khởi tạo mảng. Nếu bạn muốn một cái gì đó năng động, bạn cần phải sử dụng một đối tượng List.

0
int[] dataArray= new int[10]; 
    Random random = new Random(); 
    for (int i = 0; i < random.Next(1, 10); i++) 
    { 
     dataArray[i] = random.Next(1, 1000); 
    } 
1

Có vẻ như bạn cần khởi tạo dataArray.

Làm int[] dataArray = new int[10] thay vì chỉ mã bạn có ở dòng đầu tiên của phương pháp.

trong đó 10 là số lượng các yếu tố bạn sẽ xử lý.

Nếu bạn không chắc chắn về kích thước, bạn nên sử dụng một ArrayList hoặc tốt hơn, một Danh sách.

+0

Trong trường hợp của mình, 10 sẽ là số lượng * tối đa * của các phần tử, vì anh ấy đang cố đặt kích thước giữa [1,10] – JeffH

0

Hãy thử này:

 Random random = new Random(); 
     int cnt = random.Next(1, 10); 
     int[] dataArray = new int[cnt]; 
     for (int i = 0; i < cnt; i++) 
     { 
      dataArray[i] = random.Next(1, 1000); 
     } 
Các vấn đề liên quan