7

您好,我对 c# 数组有疑问。我需要一个数组来存储一些数据......我的代码是

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

但是编译器说:未定义 var 如何定义没有固定大小的双精度数组?非常感谢!

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>您可以像遍历数组一样遍历 a :

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:

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 回答