Конечно, это возможно. ListView.delegate
является своего рода указателем на Component
, который будет рисовать элементы, чтобы вы могли их изменить.
Например:
Employee { id: delegateEmployee }
Manager { id: delegateManager}
...
ListView {
property string position
delegate: position == "Engineer" ? delegateEmployee : delegateManager
}
Массивы всегда имеют фиксированный размер и должны быть определены следующим образом:
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
использует массив в фон и переопределяет его, когда на нем заканчивается место:
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
так же, как и массив:
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]);
}
Насколько я понимаю, вы не объявляли переменную zaehlMittel
. Я думаю, это то, на что жалуется компилятор.
Кроме того, даже если вы, конечно, можете определить значение этой переменной программно, в тот момент, когда вы захотите создать массив, его размер должен быть известен. Так работают массивы.
Если вы не можете сделать это легко, я предлагаю использовать какую-то динамическую структуру данных, например список или набор. Затем, когда все элементы добавлены,
Вы должны создать экземпляр массива перед его использованием:
double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);
Очевидное решение, которое приходит на ум, - использовать список:
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
делает за кулисами - вероятно, намного эффективнее, чем вы можете.