ภาพรวม
คุณสมบัติ 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 ใช้
lockstatement,Monitor, หรือคอลเลกชัน thread-safe เช่นConcurrentBag<T>,ConcurrentQueue<T> Array.Synchronized()ไม่มีสำหรับอาร์เรย์ (มีสำหรับ ArrayList, Hashtable, Queue, Stack)Equals()สำหรับอาร์เรย์เปรียบเทียบอ้างอิง (reference equality)