Как определить, достигну ли я начала списка при использовании обратного цикла For? - PullRequest
0 голосов
/ 19 октября 2019

Я довольно новичок в C #, поэтому извините, если это простой вопрос

-

У меня есть список объектов и яЯ использую для цикла, чтобы вернуться назад по списку. Каждое свойство объекта stock установлено в текстовое поле для отображения значения, и есть кнопка, которая позволяет пользователю циклически проходить через каждый объект, изменяя значения текстовых полей.

Мне нужно сказать, достигну ли яначало списка, так что я могу деактивировать кнопку, позволяющую пользователю вернуться назад по списку.

Примечание - Счетчик> 1, потому что мне пришлось пропустить первый элементв списке.

Вот мой код:

            if (stockList.Count > 1)
            {

                for (int i = stockList.Count - 1; i >= 0; i--)
                {
                    txtName.Text = stockList[i].Name;
                    numLastPrice.Value = stockList[i].LastPrice;
                    numOpeningPrice.Value = stockList[i].OpeningPrice;
                    numLowPrice.Value = stockList[i].LowPrice;
                    numHighPrice.Value = stockList[i].HighPrice;

                    if (i == ???)
                    {
                        txtName.Text = stockList[i].Name;
                        numLastPrice.Value = stockList[i].LastPrice;
                        numOpeningPrice.Value = stockList[i].OpeningPrice;
                        numLowPrice.Value = stockList[i].LowPrice;
                        numHighPrice.Value = stockList[i].HighPrice;

                        btnBack.Enabled = false;
                    }
                }

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Если у вас есть 10 элементов в этом списке, то вы переходите назад с 9 на 0 (индексы по умолчанию равны нулю)

В вашем случае 0 обозначает первый элемент в вашем списке, поэтому просто проверьте, что индекс равен 0

if (i == 0)

(редактировать после прочтения комментариев)

в цикле for, который вы объявляете i как int со значением .Count - 1:

for (int i = stockList.Count - 1; i >= 0; i--)

, поэтому в вашем цикле i это просто переменная, но в результате того, как вы ее объявили, она также будетзначение индекса вашего списка во время итерации цикла.

Надеюсь, это поможет.

0 голосов
/ 19 октября 2019

Я надеюсь, что следующий фрагмент поможет вам увидеть взаимосвязь между i и списком:

var myList = new List<string>() { "A", "B", "C", "D", "E" };

for (int i = myList.Count() - 1; i >= 0; i--)
{
    Console.WriteLine($"i:{i}, myList[{i}]={myList[i]}");
    if (i == 3)
    {
        //I can access the elements at an index different than `i`
        Console.WriteLine($"i:{i}, Seaky peek at the 5th element (index 4): {myList[4]}");
    }
}

// This would cause a compilation error because `i` is being used outside of `for`
//i = 100; // Error: The name 'i' does not exist in the current context

Console.WriteLine($"First item is myList[0] and is '{myList[0]}'");
Console.WriteLine($"Last item is myList[myLIst.Count()-1] ans is '{myList[myList.Count() - 1]}'");


// Let's go through the list again 
for (int someNameForIndex = myList.Count() - 1; someNameForIndex >= 0; someNameForIndex--)
{
    Console.WriteLine($"i:{someNameForIndex}, myList[{someNameForIndex}]={myList[someNameForIndex]}");
}

Это приведет к следующему выводу

i:4, myList[4]=E
i:3, myList[3]=D
i:3, Seaky peek at the 5th element (index 4): E
i:2, myList[2]=C
i:1, myList[1]=B
i:0, myList[0]=A
First item is myList[0] and is 'A'
Last item is myList[myLIst.Count()-1] ans is 'E'
i:4, myList[4]=E
i:3, myList[3]=D
i:2, myList[2]=C
i:1, myList[1]=B
i:0, myList[0]=A
...