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

การส่งอาร์เรย์ไปยังเมธอดใน C#

การส่งอาร์เรย์เป็นพารามิเตอร์เมธอดใน C#

ใน C# อาร์เรย์เป็น Reference Type เมื่อส่งไปยังเมธอด จะส่ง "อ้างอิง" (reference) ไป ไม่ใช่คัดลอกข้อมูล หมายความว่าเมธอดสามารถแก้ไขค่าในอาร์เรย์ต้นฉบับได้

ตัวอย่าง: ส่งอาร์เรย์เพื่อคำนวณผลรวม

using System;

namespace Test
{
    class Demo
    {
        // เมธอดรับอาร์เรย์และขนาด คืนค่าผลรวม
        int DisplaySum(int[] arr, int size)
        {
            int sum = 0;
            for (int i = 0; i < size; ++i)
            {
                sum += arr[i];
            }
            return sum;
        }

        static void Main(string[] args)
        {
            Demo d = new Demo();
            int[] myArr = new int[] { 59, 34, 76, 65, 12, 99 };
            int sum = d.DisplaySum(myArr, 5); // ส่ง 5 ตัวแรก
            
            Console.WriteLine($"ผลรวม 5 ตัวแรก: {sum}"); // 59+34+76+65+12 = 246
            Console.ReadKey();
        }
    }
}

ผลลัพธ์

ผลรวม 5 ตัวแรก: 246

จุดสำคัญเกี่ยวกับการส่งอาร์เรย์

ลักษณะคำอธิบาย
Pass by Reference (Reference Type)อาร์เรย์ถูกส่งผ่าน reference เมธอดเข้าถึงข้อมูลเดียวกัน
การเปลี่ยนแปลงในเมธอดส่งผลต่ออาร์เรย์ต้นฉบับ
ไม่ต้องใช้ ref/outเพราะอาร์เรย์เป็น reference type แล้ว
ต้องส่งขนาดแยกC# ไม่รู้ขนาดอาร์เรย์จากพารามิเตอร์ (ยกเว้นใช้ arr.Length ในเมธอด)

ตัวอย่าง: แก้ไขค่าในอาร์เรย์จากเมธอด


void ModifyArray(int[] arr)
{
    for (int i = 0; i < arr.Length; i++)
    {
        arr[i] *= 2; // คูณ 2 ทุกค่า - ส่งผลต่ออาร์เรย์ต้นฉบับ
    }
}

// การใช้งาน
int[] numbers = { 1, 2, 3 };
ModifyArray(numbers);
// numbers กลายเป็น { 2, 4, 6 }

หากไม่ต้องการให้แก้ไขต้นฉบับ


// 1. ส่งสำเนา (Copy)
ModifyArray((int[])numbers.Clone());

// 2. ใช้ params (สร้างอาร์เรย์ใหม่)
void ModifyParams(params int[] arr) { ... }

// 3. ใช้ ReadOnlySpan (C# 7.2+)
void ReadOnly(ReadOnlySpan arr) { ... } // ไม่สามารถแก้ไขได้

ส่งอาร์เรย์หลายมิติ


void ProcessMatrix(int[,] matrix)
{
    int rows = matrix.GetLength(0);
    int cols = matrix.GetLength(1);
    // ...
}

// เรียกใช้
int[,] mat = new int[3, 3];
ProcessMatrix(mat);