Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เพิ่มอ็อบเจ็กต์ท้าย ArrayList ใน C#

ArrayList ใช้เมธอด Add(object) เพิ่มอ็อบเจ็กต์ที่ท้ายของลิสต์ เนื่องจากเป็น non-generic จึงรับพารามิเตอร์เป็น object สามารถเพิ่มได้ทุกประเภท (value types จะถูก boxing)

ตัวอย่างโค้ดที่ 1: เพิ่มสตริง

using System;
using System.Collections;

public class Demo
{
    public static void Main(string[] args)
    {
        ArrayList list = new ArrayList();
        list.Add("Tim");
        list.Add("Katie");
        list.Add("Amy");
        list.Add("Carlos");
        list.Add("Chris");
        list.Add("Jason");

        Console.WriteLine("Elements in ArrayList...");
        foreach (string res in list)
        {
            Console.WriteLine(res);
        }
    }
}

ผลลัพธ์

Elements in ArrayList...
Tim
Katie
Amy
Carlos
Chris
Jason

ตัวอย่างโค้ดที่ 2: เปรียบเทียบสอง ArrayList

using System;
using System.Collections;

public class Demo
{
    public static void Main(string[] args)
    {
        ArrayList list1 = new ArrayList();
        list1.Add("A");
        list1.Add("B");
        list1.Add("C");
        list1.Add("D");
        list1.Add("E");
        list1.Add("F");
        list1.Add("G");
        list1.Add("H");
        list1.Add("I");

        Console.WriteLine("Elements in ArrayList1...");
        foreach (string res in list1)
        {
            Console.WriteLine(res);
        }

        ArrayList list2 = new ArrayList();
        list2.Add("1");
        list2.Add("2");
        list2.Add("3");
        list2.Add("4");
        list2.Add("5");
        list2.Add("6");

        Console.WriteLine("Elements in ArrayList2...");
        foreach (string res in list2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("Is ArrayList1 equal to ArrayList2? = " + list1.Equals(list2));
    }
}

ผลลัพธ์

Elements in ArrayList1...
A
B
C
D
E
F
G
H
I
Elements in ArrayList2...
1
2
3
4
5
6
Is ArrayList1 equal to ArrayList2? = False

ข้อสังเกตสำคัญ

  • Add(object) เพิ่มที่ท้ายลิสต์ คืนค่า index (int) ของรายการที่เพิ่งเพิ่ม
  • Equals() ของ ArrayList เปรียบเทียบ reference equality ไม่ใช่ค่า - list1.Equals(list2) จะเป็น true ก็ต่อเมื่ออ้างอิงอ็อบเจ็กต์เดียวกัน
  • ใช้ AddRange(ICollection) เพื่อเพิ่มหลายรายการพร้อมกัน
  • ArrayList ขยาย capacity อัตโนมัติ (0 → 4 → 8 → 16 → 32...)

ArrayList vs List<T> - ทำไมควรใช้ List<T>

หัวข้อArrayListList<T>
Type Safetyไม่มี (object)มี (compile-time)
Boxing/Unboxingจำเป็นสำหรับ value typesไม่จำเป็น
Performanceช้ากว่าเร็วกว่า
Memoryมากกว่า (boxing overhead)น้อยกว่า
LINQ Supportจำกัดเต็มรูปแบบ

แนวทางปฏิบัติที่ดี (Best Practice)

หลีกเลี่ยง ArrayList ในโค้ดใหม่ ใช้ List<T> แทนเสมอ ยกเว้นกรณีที่ต้องรักษาความเข้ากันได้กับ .NET Framework 1.0/1.1 เก่าๆ