2017-08-20 15 views
5
public class ListTest 
{ 
    public List<int> MyList; 
    public ListTest() 
    { 
     MyList = new List<int> { 1, 2, 3 }; 
    } 
} 

var listTest = new ListTest() 
{ 
    MyList = {4,5,6} 
}; 

Bạn có biết giá trị của listTest.MyList không?Lỗi hoạt động mới của C#?

Sẽ {1,2,3,4,5,6}

enter image description

Ai đó có thể giải thích điều đó không ??

Trả lời

2

Cú pháp này chỉ cần gọi .Addsau khi hoàn thành hàm tạo. Kết quả là bạn nhận được 1,2,3 từ hàm tạo và hơn 4,5,6 được thêm một.

+0

Nhưng hoạt động được chỉ định hoạt động. Nó bằng với .add ?? –

+1

@ L.Tim, nó _seems_ một toán tử gán, nhưng nó không phải. Nó chỉ là cú pháp cú pháp cho một vòng lặp trên các mục giữa '{}' thêm những mục đó vào một bộ sưu tập _already initialized_. –

13

Nó không phải là lỗi, mà là hậu quả của cách cú pháp khởi tạo { ... } hoạt động trong C#.

Cú pháp đó có sẵn cho bất kỳ loại bộ sưu tập nào có phương thức Add(). Và tất cả những gì nó làm là thay thế trình tự trong dấu ngoặc đơn bằng một chuỗi các cuộc gọi đến phương thức Add().

Trong ví dụ của bạn, trước tiên bạn khởi tạo, trong hàm tạo, giá trị với ba phần tử đầu tiên. Sau đó, sau này, khi bạn chỉ định { 4, 5, 6 } cho thuộc tính, hãy gọi lại Add() bằng các giá trị đó.

Nếu bạn muốn xóa các nội dung trước đó, bạn cần phải gán với các nhà điều hành new, như thế này:

var listTest = new ListTest() 
{ 
    MyList = new List<int> {4,5,6} 
}; 

Bằng cách đưa các nhà điều hành new, bạn sẽ có cả một đối tượng hoàn toàn mới, cũng như Add() giá trị.

3
var listTest = new ListTest() // This line will first call constructor of ListTest class . 
//As constructor adds 1,2,3 in list MyList will have 3 recrods 
{ 
    MyList = {4,5,6} // Once you add this statement this will add 3 more values in the list . 
    // So instead of creating new list it will Add 3 elements in existing list 
}; 

//Hence total 6 records will be there in the list 
Các vấn đề liên quan