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

ตรวจสอบว่าอาร์เรย์ถูกซิงโครไนซ์ (Synchronized) หรือไม่ใน C#

ภาพรวม

คุณสมบัติ Array.IsSynchronized บอกว่าอาร์เรย์มีการซิงโครไนซ์ (thread-safe wrapper) หรือไม่ อาร์เรย์ทั่วไปใน C# ไม่ได้ถูกซิงโครไนซ์โดยค่าเริ่มต้น (คืนค่า false)

ตัวอย่างที่ 1: ตรวจสอบคุณสมบัติของอาร์เรย์ว่าง

using System;

public class Demo
{
    public static void Main()
    {
        string[] products = new string[] { };
        Console.WriteLine("One or more planets begin with 'E'? = {0}",
            Array.Exists(products, ele => ele.StartsWith("E")));
        Console.WriteLine("Is the array having fixed size? = " + products.IsFixedSize);
        Console.WriteLine("Is the array read only? = " + products.IsReadOnly);
        Console.WriteLine("Is the array synchronized? = " + products.IsSynchronized);
    }
}

ผลลัพธ์

One or more planets begin with 'E'? = False
Is the array having fixed size? = True
Is the array read only? = False
Is the array synchronized? = False

ตัวอย่างที่ 2: ตรวจสอบอาร์เรย์สองตัวและเปรียบเทียบ

using System;

public class Demo
{
    public static void Main()
    {
        String[] strArr1 = new String[3] { "John", "Jacob", "Tim" };
        String[] strArr2 = new String[3] { "Tom", "Brad", "Bradley" };
        Console.WriteLine("First String array...");
        foreach(string val in strArr1)
        {
            Console.WriteLine(val);
        }
        Console.WriteLine("Is the 1st array having fixed size? = " + strArr1.IsFixedSize);
        Console.WriteLine("Is the 1st array read only? = " + strArr1.IsReadOnly);
        Console.WriteLine("Is the 1st array synchronized? = " + strArr1.IsSynchronized);
        Console.WriteLine("\nSecond String array...");
        foreach(string val in strArr2)
        {
            Console.WriteLine(val);
        }
        Console.WriteLine("Is the 2nd array having fixed size? = " + strArr2.IsFixedSize);
        Console.WriteLine("Is the 2nd array read only? = " + strArr2.IsReadOnly);
        Console.WriteLine("Is the 2nd array synchronized? = " + strArr2.IsSynchronized);
        Console.WriteLine("Are both the array objects equal? = " + strArr1.Equals(strArr2));
    }
}

ผลลัพธ์

First String array...
John
Jacob
Tim
Is the 1st array having fixed size? = True
Is the 1st array read only? = False
Is the 1st array synchronized? = False
Second String array...
Tom
Brad
Bradley
Is the 2nd array having fixed size? = True
Is the 2nd array read only? = False
Is the 2nd array synchronized? = False
Are both the array objects equal? = False

คำอธิบายเพิ่มเติม

  • อาร์เรย์ใน C# มีขนาดคงที่ (IsFixedSize = true) และไม่ได้ถูกซิงโครไนซ์ (IsSynchronized = false) โดยค่าเริ่มต้น
  • IsReadOnly เสมอเป็น false สำหรับอาร์เรย์ทั่วไป (ยกเว้นอาร์เรย์ที่สร้างจาก Array.AsReadOnly())
  • เพื่อให้ thread-safe ใช้ lock statement, Monitor, หรือคอลเลกชัน thread-safe เช่น ConcurrentBag<T>, ConcurrentQueue<T>
  • Array.Synchronized() ไม่มีสำหรับอาร์เรย์ (มีสำหรับ ArrayList, Hashtable, Queue, Stack)
  • Equals() สำหรับอาร์เรย์เปรียบเทียบอ้างอิง (reference equality)