7

こんにちは、C# 配列に問題があります。そこにいくつかのデータを格納する配列が必要です...私のコードはそれです

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

しかし、コンパイラは次のように述べています: not defined var どうすれば固定サイズなしで double 配列を定義できますか? どうもありがとう!

4

4 に答える 4

23

配列のサイズは常に固定されており、次のように定義する必要があります。

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};

クラスはList<T>バックグラウンドで配列を使用し、スペースがなくなると再定義します。

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();

List<T>配列と同じように、 を反復処理できます。

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]);
}
于 2009-06-22T08:53:54.480 に答える
0

zaehlMittel私が見たところ、変数を宣言していませんでした。これは、コンパイラが不平を言っていることだと思います。

それとは別に、もちろんその変数の値をプログラムで決定することはできますが、配列を作成する時点で、そのサイズを知っておく必要があります。これが配列の仕組みです。

それが簡単にできない場合は、リストやセットなどの何らかの動的データ構造を使用することをお勧めします。次に、すべての要素が追加されたら、もちろん、その時点で要素の数がわかっているので、そこから自由に配列を作成できます (そのような便利なメソッドがtoArray()あればそれも処理できます)。

于 2009-06-22T08:54:03.827 に答える
0

配列を使用する前にインスタンス化する必要があります。

double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);
于 2009-06-22T08:54:05.197 に答える
0

頭に浮かぶ明らかな解決策は、リストを使用することです。

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

ただし、リストから配列に変換したくない場合は、後で配列を拡張できます。

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
}

List舞台裏で多くの作業を行っているため、理想的ではありません。おそらく、実際よりもはるかに効率的です。

于 2009-06-22T08:55:29.860 に答える