Я работаю над C# list
, который имеет многомерный тип, который я создал сам, и я пытаюсь вставить элементы в этот список из другого списка, который по некоторым причинам выбрасывает исключение Index вне диапазона, когда я пытаюсь вставить значение в строку 0th
, используя следующий код
List<StructuresDS> listStructures = new List<StructuresDS>();
listStructures[0].time =Convert.ToDateTime(AxiomSubSet[0].time.ToString("HH:mm:ss"));
listStructures[0].CC = AxiomSubSet[0].CC;
listStructures[0].term = listCodedTerms[0];
listStructures[0].strike = (Convert.ToDouble(AxiomSubSet[0].strike) * 100).ToString();
listStructures[0].strategy = AxiomSubSet[0].strategy;
listStructures[0].premium = Convert.ToDouble(AxiomSubSet[0].price);
listStructures[0].volume = Convert.ToInt32(AxiomSubSet[0].quantity);
Могу ли я узнать причину такого поведения и где я делаю ошибку?
2 ответа
Вы пытаетесь установить listStructures[0]
, но он еще не добавлен. Вам просто нужно сделать что-то вроде:
List<StructuresDS> listStructures = new List<StructuresDS>();
listStructures.Add(new StructureDS
{
time = Convert.ToDateTime(AxiomSubSet[0].time.ToString("HH:mm:ss")),
CC = AxiomSubSet[0].CC,
// etc.
});
.Add()
будут добавлять новый элемент в список на каждой итерации. (Просто убедитесь, что первая строка находится вне цикла.)
Мне пришлось вставить значения как для AxiomSubSet, так и для listCodedTerms, и я предположил, что AxiomSubset.time был датой, но был строкой в StructuresDS. Я также предположил, что premium и volume были double и int соответственно, а все остальное было строкой, но код ниже компилируется и работает так, как ожидалось для меня. Я считаю, что ваша проблема в том, что вы предполагаете, что после создания списка есть 0-й элемент, но вы ничего не добавили к нему. ListStructures.Add (new StructuresDS {...}) также решит эту проблему.
List<StructuresDS> listStructures = new List<StructuresDS> {
new StructuresDS {
time = Convert.ToDateTime(AxiomSubSet[0].time.ToString("HH:mm:ss")),
CC = AxiomSubSet[0].CC,
term = listCodedTerms[0],
strike = (Convert.ToDouble(AxiomSubSet[0].strike) * 100).ToString(),
strategy = AxiomSubSet[0].strategy,
premium = Convert.ToDouble(AxiomSubSet[0].price),
volume =Convert.ToInt32(AxiomSubSet[0].quantity)
}
};
Чтобы проверить, что объект был создан, как ожидалось, а 0-й элемент списка содержит ожидаемые значения, я записал каждое свойство объекта в консоль, используя форму ниже:
Console.WriteLine(listStructures[0].time.ToString());
Сработает ли это для вас, когда вы примените его к своей среде?
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
listStructures
пуст, поэтому вlistStructures[0]
нет элементов.