Forums Neueste Beiträge
 

Array als Referenzparameter

23/07/2009 - 16:30 von ChristianH | Report spam
Hi,

warum kann ein als Parameter übergebenes Array nicht in einer Funktion
befüllen?

Grüße
Christian
 

Lesen sie die antworten

#1 Günter Prossliner
23/07/2009 - 16:50 | Warnen spam
Hallo Christian!

warum kann ein als Parameter übergebenes Array nicht in einer Funktion
befüllen?



Das ist nicht ganz deutsch. Was willst Du nun? Willst Du es beschreiben oder
willst Du verhindern dass es beschrieben werden kann?


Allgemein:
* Ein Array kann weder vergössert noch verkleinert werden
* Ein 'ref' brauchst Du nur wenn die Funktion ein *anderes* Array zuweißt,
nicht aber wenn Eintràge überschrieben werden.

int[] i={1,2,3};
f(i);
// hier steht dann wirklich 0,0,0 drinnen

void f(int[] i) {
i[0] = 0;
i[1] = 0;
i[2] = 0;
}



int[] i={1,2,3};
f(ref i);
// das geht nur mit 'ref' da in der Funktion ein neues Array zugewiesen
wird.

void f(ref int[] i) {
i = {1,2,3,4};
}

In diesem Fall würde man wohl "out" nehmen (bzw. einen return-value), da 'i'
nicht gelesen wird.


Wenn Du ein Array an eine "fremde" Funktion übergibst dann musst Du davon
ausgehen, dass diese zumindst Werte überschreiben kann. Um das zu verhindern
kannst Du entweder z.b.

- das Array kopieren und die Kopie übergeben

- das Ganze als IEnumerable übergeben (wobei man natürlich nicht
verhindern kann dass in der Funktion das Ganze wieder in ein Array gecasted
wird)

- eine eigene Struktur erstellen bzw. eine ReadOnlyCollection nehmen und
diese übergeben

z.b.:

int[] i={1,2,3};
f((int[])i.Clone());
// da eine kopie übergeben wurde steht hier immer noch 1,2,3 drinnen.

void f(int[] i) {
i[0] = 0;
i[1] = 0;
i[2] = 0;
}


OK?
mfg GP

Ähnliche fragen