Übergeben von Arrays mithilfe von "ref" und "out" (C#-Programmierhandbuch)

Wie alle out-Parameter muss auch ein out-Parameter eines Arraytyps vor der Verwendung zugewiesen werden, d.h., er muss vom Aufgerufenen zugewiesen werden. Zum Beispiel:

static void TestMethod1(out int[] arr)
{
    arr = new int[10];   // definite assignment of arr
}

Wie alle ref-Parameter muss auch ein ref-Parameter eines Arraytyps vom Aufrufer definitiv zugewiesen werden. Daher besteht keine Notwendigkeit, dass die definitive Zuweisung vom Aufgerufenen vorgenommen wird. Ein ref-Parameter eines Arraytyps kann als Ergebnis des Aufrufs geändert werden. Beispielsweise kann dem Array der Wert NULL zugewiesen werden, oder es kann mit einem anderen Array initialisiert werden. Zum Beispiel:

static void TestMethod2(ref int[] arr)
{
    arr = new int[10];   // arr initialized to a different array
}

In den beiden folgenden Beispielen wird der Unterschied zwischen out und ref bei der Übergabe von Arrays an Methoden veranschaulicht.

Beispiel

In diesem Beispiel wird das Array theArray im Aufrufer (der Main-Methode) deklariert und in der FillArray-Methode initialisiert. Anschließend werden die Elemente des Arrays an den Aufrufer zurückgegeben und angezeigt.

class TestOut
{
    static void FillArray(out int[] arr)
    {
        // Initialize the array:
        arr = new int[5] { 1, 2, 3, 4, 5 };
    }

    static void Main()
    {
        int[] theArray; // Initialization is not required

        // Pass the array to the callee using out:
        FillArray(out theArray);

        // Display the array elements:
        System.Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
        {
            System.Console.Write(theArray[i] + " ");
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
    /* Output:
        Array elements are:
        1 2 3 4 5        
    */

Beispiel

In diesem Beispiel wird das Array theArray im Aufrufer (der Main-Methode) initialisiert und mithilfe des FillArray-Parameters an die ref-Methode übergeben. Einige Arrayelemente werden in der FillArray-Methode aktualisiert. Anschließend werden die Elemente des Arrays an den Aufrufer zurückgegeben und angezeigt.

class TestRef
{
    static void FillArray(ref int[] arr)
    {
        // Create the array on demand:
        if (arr == null)
        {
            arr = new int[10];
        }
        // Fill the array:
        arr[0] = 1111;
        arr[4] = 5555;
    }

    static void Main()
    {
        // Initialize the array:
        int[] theArray = { 1, 2, 3, 4, 5 };

        // Pass the array using ref:
        FillArray(ref theArray);

        // Display the updated array:
        System.Console.WriteLine("Array elements are:");
        for (int i = 0; i < theArray.Length; i++)
        {
            System.Console.Write(theArray[i] + " ");
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
    /* Output:
        Array elements are:
        1111 2 3 4 5555
    */

Siehe auch

ref
Modifizierer für out-Parameter
C#-Programmierhandbuch
Arrays
Eindimensionale Arrays
Mehrdimensionale Arrays
Verzweigte Arrays