Übergeben von Arrays mithilfe von "ref" und "out" (C#-Programmierhandbuch)Passing Arrays Using ref and out (C# Programming Guide)

Wie alle out-Parameter muss auch ein out-Parameter eines Arraytyps vor der Verwendung zugewiesen werden, d.h., er muss vom Aufgerufenen zugewiesen werden.Like all out parameters, an out parameter of an array type must be assigned before it is used; that is, it must be assigned by the callee. Zum Beispiel:For example:

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.Like all ref parameters, a ref parameter of an array type must be definitely assigned by the caller. Daher besteht keine Notwendigkeit, dass die definitive Zuweisung vom Aufgerufenen vorgenommen wird.Therefore, there is no need to be definitely assigned by the callee. Ein ref-Parameter eines Arraytyps kann als Ergebnis des Aufrufs geändert werden.A ref parameter of an array type may be altered as a result of the call. Beispielsweise kann dem Array der Wert NULL zugewiesen werden, oder es kann mit einem anderen Array initialisiert werden.For example, the array can be assigned the null value or can be initialized to a different array. Zum Beispiel:For example:

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.The following two examples demonstrate the difference between out and ref when used in passing arrays to methods.

BeispielExample

In diesem Beispiel wird das Array theArray im Aufrufer (der Main-Methode) deklariert und in der FillArray-Methode initialisiert.In this example, the array theArray is declared in the caller (the Main method), and initialized in the FillArray method. Anschließend werden die Elemente des Arrays an den Aufrufer zurückgegeben und angezeigt.Then, the array elements are returned to the caller and displayed.

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        
    */

BeispielExample

In diesem Beispiel wird das Array theArray im Aufrufer (der Main-Methode) initialisiert und mithilfe des FillArray-Parameters an die ref-Methode übergeben.In this example, the array theArray is initialized in the caller (the Main method), and passed to the FillArray method by using the ref parameter. Einige Arrayelemente werden in der FillArray-Methode aktualisiert.Some of the array elements are updated in the FillArray method. Anschließend werden die Elemente des Arrays an den Aufrufer zurückgegeben und angezeigt.Then, the array elements are returned to the caller and displayed.

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 auchSee Also

refref
Modifizierer für out-Parameterout parameter modifier
C#-ProgrammierhandbuchC# Programming Guide
ArraysArrays
Eindimensionale ArraysSingle-Dimensional Arrays
Mehrdimensionale ArraysMultidimensional Arrays
Verzweigte ArraysJagged Arrays