Я работаю над 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);

Могу ли я узнать причину такого поведения и где я делаю ошибку?

0
DoIt 2 Сен 2014 в 21:58
4
listStructures пуст, поэтому в listStructures[0] нет элементов.
 – 
Wagner DosAnjos
2 Сен 2014 в 22:00

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.
                   });
4
ppalms 2 Сен 2014 в 22:03
Будет ли приведенный выше код добавлять каждую строку, когда я помещаю ее в цикл, или заменит элементы?
 – 
DoIt
2 Сен 2014 в 22:04
1
Зацикливание и вызов .Add() будут добавлять новый элемент в список на каждой итерации. (Просто убедитесь, что первая строка находится вне цикла.)
 – 
ppalms
2 Сен 2014 в 22:05

Мне пришлось вставить значения как для 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());

Сработает ли это для вас, когда вы примените его к своей среде?

1
Branden Schwartz 2 Сен 2014 в 22:15