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

เมธอด Array.ConstrainedCopy() ใน C#

ภาพรวม

เมธอด Array.ConstrainedCopy() ใน C# ใช้คัดลอกช่วงขององค์ประกอบจากอาร์เรย์ต้นทาง (source array) เริ่มจากดัชนีที่ระบุ ไปยังอาร์เรย์ปลายทาง (destination array) เริ่มจากดัชนีที่ระบุ ความแตกต่างสำคัญจาก Array.Copy() คือ ConstrainedCopy รับประกันความสมบูรณ์ของข้อมูล (atomic operation) - หากเกิดข้อผิดพลาดระหว่างการคัดลอก อาร์เรย์ปลายทางจะยังคงอยู่ในสถานะเดิม ไม่ได้รับการเปลี่ยนแปลงบางส่วน

ไวยากรณ์

public static void ConstrainedCopy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);

พารามิเตอร์

  • sourceArray - อาร์เรย์ต้นทางที่มีข้อมูลให้คัดลอก
  • sourceIndex - ดัชนีเริ่มต้นในอาร์เรย์ต้นทาง (32-bit integer)
  • destinationArray - อาร์เรย์ปลายทางที่รับข้อมูล
  • destinationIndex - ดัชนีเริ่มต้นในอาร์เรย์ปลายทาง (32-bit integer)
  • length - จำนวนองค์ประกอบที่ต้องการคัดลอก (32-bit integer)

ตัวอย่างการใช้งาน

using System;

public class Demo
{
    public static void Main()
    {
        int[] arrDest = new int[10];
        
        Console.WriteLine("องค์ประกอบของอาร์เรย์ต้นทาง...");
        int[] arrSrc = { 20, 50, 100, 150, 200, 300, 400 };
        
        for (int i = 0; i < arrSrc.Length; i++)
            Console.Write("{0} ", arrSrc[i]);
        
        Console.WriteLine();
        
        // คัดลอก 4 องค์ประกอบ จากดัชนี 3 ของต้นทาง (ค่า 150) ไปยังดัชนี 0 ของปลายทาง
        Array.ConstrainedCopy(arrSrc, 3, arrDest, 0, 4);
        
        Console.WriteLine("อาร์เรย์ปลายทาง:");
        for (int i = 0; i < arrDest.Length; i++)
            Console.Write("{0} ", arrDest[i]);
    }
}

ผลลัพธ์

องค์ประกอบของอาร์เรย์ต้นทาง...
20 50 100 150 200 300 400
อาร์เรย์ปลายทาง:
150 200 300 400 0 0 0 0 0 0

เปรียบเทียบ Array.Copy() กับ Array.ConstrainedCopy()

คุณสมบัติArray.Copy()Array.ConstrainedCopy()
ความน่าเชื่อถืออาจทิ้งอาร์เรย์ปลายทางในสถานะบางส่วนหากล้มเหลวรับประกัน atomic - ทั้งสำเร็จหรือไม่เปลี่ยนแปลงเลย
ประสิทธิภาพเร็วกว่าเล็กน้อยช้ากว่าเล็กน้อย (มี overhead การตรวจสอบ)
การใช้งานทั่วไปการคัดลอกทั่วไปการคัดลอกที่ต้องความน่าเชื่อถือสูง (critical sections)
รองรับชนิดอาร์เรย์ทุกชนิดเฉพาะอาร์เรย์ที่มีชนิดองค์ประกอบเหมือนกัน (type-safe)

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

  • ทั้งสองอาร์เรย์ต้องมีชนิดองค์ประกอบที่เข้ากันได้ (type compatibility)
  • หากพื้นที่ในอาร์เรย์ปลายทางไม่พอ จะโยน ArgumentException
  • เหมาะสำหรับโค้ดที่ต้องการความน่าเชื่อถือสูง เช่น ระบบทำธุรกรรม (transactional systems)