Entwickler-Ecke

WinForms - Array übergeben


ots_sharp - Mo 07.05.12 15:48
Titel: Array übergeben
Hallo,
aus einem Ereignis möchte ich ein Array zusammenbasteln. Irgendwie verliert das Array bei der Übergabe seine Inhalte. Bestimmt ist die Lösung wieder ganz einfach. Vielleicht seht ihr den Fehler?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private void btnSaveSettings_Click(object sender, EventArgs e)
        {
            SWF.Control[] controls = new SWF.ComboBox[]{};
            GetArrayOfBoxes(controls);
        }
private GetArrayOfBoxes(SWF.Control[] control)
        {
            control = new SWF.Control[] { this.Box1, this.Box2};

        }


Gruß Stefan


Th69 - Mo 07.05.12 16:33

Hallo,

so legst du innerhalb deiner Methode nur eine lokale Instanz an, sieh dir mal die Schlüsselwörter ref und out an: Modifizierer für out-Parameter [http://msdn.microsoft.com/de-de/library/ee332485.aspx] (Titel ist zwar falsch übersetzt [Original: "out parameter modifier"], aber ich denke mal, daß du lieber deutsch als englisch liest.)

Oder gib einfach das Control-Array als Rückgabewert deiner Methode an...


ots_sharp - Di 08.05.12 07:23

Die Lösung: Übergabe mit out-Parameter.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private void btnSaveSettings_Click(object sender, EventArgs e)
        {
            SWF.Control[] controls = new SWF.ComboBox[]{};

            GetArrayOfBoxes(out controls);
        }

private GetArrayOfBoxes(out SWF.Control[] control)
        {
            control = new SWF.Control[] { this.Box1, this.Box2};

}


Th69 - Di 08.05.12 09:52

Du brauchst das Array in deiner btnSaveSettings_Click()-Methode aber nicht initialisieren (new SWF.ComboBox[]{}), da es ja von der GetArrayOfBoxes wieder überschrieben wird (bei einem out-Parameter ist es zwingend notwendig, daß dieser Parameter in der Methode initialisiert wird).


ujr - Di 08.05.12 15:11

Hallo,

es ist hier allerdings ungewöhnlich, mit einem out-Parameter zu arbeiten, wenn man die Möglichkeit hat, den Rückgabewert zu verwenden. Gerade bei "Get..." wäre das Array als Rückgabe sinnvoller.