C# Array an Class übergeben

.:L

0
Hallo,

folgendes ist der Plan:

Ich rufe eine Klasse mit folgenden Daten auf:

Code:
float[] data = new float[1];
class.method(data);

Die Klasse sieht wie folgt aus:
Code:
public float method(float[] tdata)
{
            tdata = new float[1];
            ....
            tdata[0] = 123;
            tdata[1] = 456;
            return tdata[0];
}

Nun zu meinem Problem:
Nummero 1: Bei tdata[1] = 456, sprich beim 2. Wert im Array bekomme ich eine Out of Range Exception. Aber wieso? Ich habe oben doch gesagt das der Array 2 Wert beinhaltet.
Nummero 2: Wie gebe ich den ganzen Array zurück? return tdata[,] meckert er an...

Vielen Dank für eure Hilfe

Gruß


EDIT//
Ok, die Klasse war falsch deklariert -_-
Code:
public float[] method(float[] tdata)
Dann gehts (fast)

In der Klasse sehe ich, dass mein Array (tdata) 2 Werte hat.

Gebe ich die Werte zurück (return tdata;) sehe ich beim Aufruf nur einen Wert.

Die Deklaration der Variablen:
In der Klasse:
public float[] Method(float[] tdata)
tdata = new float[2];
return tdata;

Im Hauptprogramm;
float[] data = new float[1];
Class.Method(data);

EDIT2//
float[] data = new float[2];
dann gehts -_- sry, bitte erledigen
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

auch wenn es sich schon erledigt hat, mal ein paar Sachen zu Deinem Code:

Code:
float[] values = new float[5] // bedeutet dass das Array 5 Elemente aufnehmen kann
Wenn Du ein Array initialisierst, bedeutet die Zahl wieviele Elemente dass Array aufnehmen kann. Das darfst Du nicht mit den Indizies verwechseln. Die beginnen bei 0.

Code:
public float method(float[] tdata)
{
            tdata = new float[1]; // Warum überschreibst Du das übergebene Array?
            ....
            tdata[0] = 123;
            tdata[1] = 456;
            return tdata[0];
}
Du musst das Array nicht nochmal neu initialisieren.
 
Müsste morgen mal wieder Win an den Start bringen um das Problem genau den Grund zu gehen.
Aber um Abhilfe zu schaffen, nutze die Klasse ArrayList.

Nichts desto trotz:
Die Out-Of-Range-Exception kommt daher, dass das übergebene Array nicht groß genug ist. Du initialisierst das Array mit einem Element-Count von eins, willst aber auf das Zweite zugreifen -> Fail ;)

... lese grad den letzten Edit ;)
 
auch wenns erledigt ist, und blue die ArrayList schon genannt hat ...

wenn du das rad nicht stets neu erfinden willst interessiert dich ggf. der namespace System.Collections ... da findet sich die erwähnte ArrayList
sowie einige andere dinge die dir helfen daten zu ordnen ...

im speziellen solltest du auch einen blick auf System.Collections.Generic werfen ... darin findest du generisch typisierbare Collections ... also beispeilsweise listen die typsicher nur objekte eines typs (oder subtypen) enhalten ... in deinem fall wäre wohl eine List<float> oder ArrayList<float> gefragt

http://msdn.microsoft.com/de-de/library/system.collections(v=VS.100).aspx

http://msdn.microsoft.com/de-de/library/system.collections.generic(v=VS.100).aspx
 
Hi,

danke für die vielen Antworten, die helfen wir sehr weiter :> Nicht nur bei dem "Problem" (Was aus meiner Dusselingkeit bestand), sondern generell, danke.

Gruß
 
Zurück
Oben