Khởi tạo và thêm phần tử vào List Struct trong CSharp

đăng lúc

Cúc trúc dữ liệu Csharp : Khởi tạo và thêm phần tử vào List struct trong Csharp....

Để tạo một List<Struct> thì khá là đơn giản, chúng ta chỉ việc khai báo một Struct, tiếp đó là khai báo một List với kiểu dữ liệu là Struct mới khai báo trước đó.  Nhưng khi thêm phần tử vào List<Struct> này, những bạn mới học hoặc đơn giản là lần đầu cần dùng tới List<Struct> có thể sẽ gặp một chút khó khăn. Vì thế trong bài này, mình sẽ viết về cách tạo và thêm phần tử vào List<Struct> thành công.


Đầu tiên, để các bạn dễ hình dung nhất, tớ sẽ nói qua lại cách khai báo một List<Struct>.

1. Khai báo một Struct tên là viDu với hai thuộc tính đều cùng kiểu int là a và b:

         public struct viDu
        {
            public int a;
            public int b;
        }


2. Trong hàm chính, ta khai báo một List tên là listViDu có kiểu struct mới khai báo bên trên như sau :

         List<viDu> listViDu = new List<viDu>();

Vậy là xong phần khai báo List<Struct>.


3. Thêm phần tử vào List<Struct> :

Lỗi đầu tiên mà các bạn dễ mắc phải khi thêm phần tử vào List<Struct> là thêm phần tử không có cùng kiểu dữ liệu với List nên gây ra lỗi.

ví dụ :

         listViDu.Add(1);    // Lỗi là do 1 là số nguyên kiểu int, không phải kiểu Struct viDu nên không thể Add được

hay

         int a;
         listViDu.Add(a);
         // Cũng như trên. Lỗi vì a là kiểu số nguyên int, không phải kiểu Struct viDu nên dù các thuộc tính bên trong Struct viDu là kiểu int thì cũng không thể add được.

Vậy để Add thành phần vào List này, ta cần khai báo thêm một biến phụ có cùng kiểu dữ liệu với List để thêm vào, ta đặt tên biến phụ này là temp :

Khai báo biến phụ temp kiểu dữ liệu viDu như sau :

         var temp = new viDu();   // hoặc các bạn cũng có thể khai báo theo kiểu : viDu temp;

Sau đó, trước khi Add temp vào mảng listViDu, các bạn cần gán giá trị cho hai các thuộc tính của struct viDu temp temp.atemp.b như sau :

ví dụ :
         
         temp.a = 1;
         temp.b = 2;

Sau đó tiến hành thêm phần tử temp vào listViDu :

         listViDu.Add(temp);

Lúc này, các bạn có thể sử dụng hai phần tử listViDu[0].a (có giá trị bằng 1) và listViDu[0].b (có giá trị bằng 2) như các biến bình thường một cách thoải mái. (khi add templistViDu thì temp sẽ là phần tử đầu tiên, phần tử thứ 0 của danh sách listViDu)

Một số bạn sẽ thắc mắc như sau : Tại sao chúng ta cần gán giá trị cho các thuộc tính temp.a temp.b trước khi Add temp vào listViDu, sao không Add temp vào mới rồi gán giá trị listViDu[0].alistViDu[0].b ?

Câu trả lời là vì khi các bạn gán giá trị cho listViDu[0].alistViDu[0].b như sau :

         var temp = new viDu();
         listViDu.Add(temp)// ta chưa gán giá trị cho temp.atemp.b nhưng vẫn thêm vào.

         listViDu[0].a = 1;
         listViDu[0].b = 2;

Thì khi biên dịch chương trình, máy sẽ báo lỗi. Lý do tại sao lại xảy ra lỗi là vì C# không hỗ trợ điều này. 😀😀😀😂😂😂 (Cái này là mình chém gió đấy :V chắc là vì một lý do sâu xa nào đó mà người ta không cho phép điều này :v hoặc đơn giản là do người ta quên thêm vào =))))))

Nói ngắn gọn lại là : nếu chưa gán giá trị cho temp.atemp.b thì ta vẫn có thể thêm temp vào listViDutemp có cùng kiểu dữ liệu với listViDu nhưng sau đó ta sẽ không thể gán giá trị cho listViDu[0].alistViDu[0].b nên việc thêm temp vào như kia cũng như không.

Vì vậy, để thêm phần tử thành công, các bạn cần khởi tạo một biến phụ có cùng kiểu dữ liệu Struct với List<Struct> mà bạn cần thêm phần tử vào, sau đó gán đầy đủ giá trị cho các thuộc tính của biến phụ này. Và cuối cùng là Add biến này vào List<Struct>.

Và tóm một cục lại chương trình hoàn thiện của chúng ta sẽ như sau :

        public struct viDu
         {
             public int a;
             public int b;
         }

     static void Main(string[] args)
         {
             List<viDu> listViDu = new List<viDu>();
             var temp = new viDu();   // hoặc : viDu temp;
             temp.a = 1;
             temp.b = 2;
             listViDu.Add(temp);
         }

                                                                  Hình minh họa chạy chương trình :



Ngoài lề : sự khác nhau giữa hai kiểu khai báo : var temp = new viDu();   và  viDu temp; là :

khi khai báo biến theo kiểu :

           kiểu_dữ_liệu tên_biến;    //ví dụ : viDu temp;

thì biến sẽ chỉ được khai báo chứ chưa có giá trị;

còn khi khai báo theo kiểu :

           var tên_biến = new kiểu_dữ_liệu(); // ví dụ : var temp = new viDu()

thì biến sẽ được khai báo và ngoài ra, biến sẽ được gán sẵn cho giá trị mặc định của kiểu dữ liệu var là 0.

Chúc các bạn thành công.

Nếu có khó khăn hay vấn đề cần giúp đỡ các bạn hãy comment bên dưới bài viết này nhé.

Bản quyền bài viết thuộc về Rebvn.com. Mọi copy vui lòng ghi rõ nguồn.

Nội dung chính
    Bài đăng mới hơn Bài đăng cũ hơn