Frage

Hallo ich habe ein Problem mit c # Arrays. Ich brauche einen Array einige Daten zu speichern, dort ... Mein Code ist, dass

double[] ATmittelMin;
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);

Aber der Compiler sagt: nicht definiert var Wie kann ich eine doppelte Array ohne feste Größe definieren? Vielen Dank!

War es hilfreich?

Lösung

Arrays sind immer eine feste Größe, und haben wie so definiert werden:

double[] items1 = new double[10];

// This means array is double[3] and cannot be changed without redefining it.
double[] items2 = {1.23, 4.56, 7.89};

Die List<T> Klasse verwendet ein Array im Hintergrund und definiert es, wenn es der Platz ausgeht:

List<double> items = new List<double>();
items.Add(1.23);
items.Add(4.56);
items.Add(7.89);

// This will give you a double[3] array with the items of the list.
double[] itemsArray = items.ToArray();

Sie können durch eine List<T> laufen, gerade wie Sie ein Array:

foreach (double item in items)
{
    Console.WriteLine(item);
}

// Note that the property is 'Count' rather than 'Length'
for (int i = 0; i < items.Count; i++)
{
    Console.WriteLine(items[i]);
}

Andere Tipps

Von dem, was ich sehe, du hast nicht die zaehlMittel Variable deklarieren. Ich denke, das ist es, was der Compiler beschwert sich über.

Abgesehen davon, dass, auch wenn Sie natürlich den Wert dieser Variablen programmatisch bestimmen kann, sobald Sie ein Array seine Größe erstellen möchten, müssen bekannt sein. Dies ist die Art und Weise Arrays arbeiten.

Falls Sie tun können, das nicht leicht, ich schlage vor, mit einer Art von dynamischer Datenstruktur, wie eine Liste oder einem Satz. Dann, wenn alle Elemente hinzugefügt wurden, sind Sie natürlich nach wie vor kostenlos ein Array aus, das zu schaffen, wie es bis zu diesem Zeitpunkt die Anzahl der Elemente kennen (obwohl es bequeme Methoden wie toArray(), die selbst darum kümmern wird).

Sie müssen die Array instanziiert vor der Verwendung:

double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);

Die offensichtliche Lösung, die in dem Sinne ist es, eine Liste zu verwenden:

List<double> ATmittelMin = new List<double>();
ATmittelMin.Add(Gradient(x, xATMax, y, yATMax);

Aber wenn Sie nicht wollen, aus einer Liste konvertieren in einem Array Sie das Array wachsen können später:

double[] ATmittelMin = new double[10];
// Some code
int index = some_value;
if (index >= TmittelMin.Length)
{
    Array.Resize(ATmittelMin, index+5);  // So we're not constantly resizing the array
}

Es ist nicht ideal, da Sie eine Menge Arbeit sind, die hinter den Kulissen List tun -. Wahrscheinlich effizienter viel als möglich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top