您好我的c#Arrays有问题。我需要一个数组来存储一些数据...... 我的代码就是那个
double[] ATmittelMin;
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);
但编译器说:未定义var 如何定义没有固定大小的双数组? 非常感谢!
答案 0 :(得分:20)
数组的大小总是固定的,必须这样定义:
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]);
}
答案 1 :(得分:0)
从我看到你没有声明zaehlMittel
变量。我想这就是编译器抱怨的内容。
除此之外,即使您当然可以以编程方式确定该变量的值,但是您想要创建数组的那一刻必须知道它的大小。这就是数组的工作方式。
如果你不能轻易做到这一点,我建议使用某种动态数据结构,如列表或集合。然后,一旦添加了所有元素,你当然可以自由地创建一个数组,因为那时你就知道了元素的数量(即使有像toArray()
这样的便利方法甚至会照顾它们那个)。
答案 2 :(得分:0)
在使用之前必须实例化数组:
double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);
答案 3 :(得分: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
在幕后做的工作 - 可能比你更有效率。