Как найти последний элемент в списке < > ?

Константа имеет другой тип (я знаю, что спецификация говорит, что 10 должен быть int, но компилятор не видит этого таким образом).

В char c = 'a' + 10, 10 фактически считается постоянной переменной типа char (поэтому ее можно добавить в a). Поэтому char c = char + char работает.

В int i = 10; char c = 'a' + i; Вы добавляете символ в целое число (целое число может быть намного больше, чем char, поэтому он выбирает больший тип данных [int], чтобы результат aka: 'a' + i = int + int). Таким образом, результатом добавления является целое число, которое не может вписаться в char c.

Если вы явно наложили i на символ (например: char c = 'a' + (char)i;), он может работать, или если вы сделал обратное (например: int c = (int)'a' + i;), это сработает.

146
задан Lee Taylor 27 October 2012 в 13:55
поделиться

8 ответов

Если вы просто хотите получить доступ к последнему элементу в списке, вы можете выполнить

var item = integerList[integerList.Count - 1];

, чтобы получить общее количество элементов в списке, вы можете использовать свойство Count

var itemCount = integerList.Count;
185
ответ дан 23 November 2019 в 21:58
поделиться

Попробуйте использовать For Each вместо For для списков. Будет намного проще.

3
ответ дан 1 August 2019 в 06:35
поделиться

Измените

for (int cnt3 = 0 ; cnt3 <= integerList.FindLastIndex ; cnt3++)

на

for (int cnt3 = 0 ; cnt3 < integerList.Count; cnt3++)
4
ответ дан 23 November 2019 в 21:58
поделиться
int lastInt = integerList[integerList.Count-1];
3
ответ дан 23 November 2019 в 21:58
поделиться

Почему бы просто не использовать свойство Count в списке?

for(int cnt3 = 0; cnt3 < integerList.Count; cnt3++)
2
ответ дан 23 November 2019 в 21:58
поделиться

Используйте свойство Count . Последним индексом будет Count - 1 .

for (int cnt3 = 0 ; cnt3 < integerList.Count; cnt3++)
2
ответ дан 23 November 2019 в 21:58
поделиться

Я бы согласился, что foreach будет намного проще, что-то вроде

foreach(AllIntegerIDs allIntegerIDs in integerList)
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\n", allIntegerIDs.m_MessageID,
allIntegerIDs.m_MessageType,
allIntegerIDs.m_ClassID,
allIntegerIDs.m_CategoryID,
allIntegerIDs.m_MessageText);
}

Также я предложил бы вам добавить свойства для доступа к вашей информации вместо общедоступных полей, в зависимости от вашей версии .net вы можете добавить это как public int MessageType {get; set;} и избавьтесь от m_ из ваших общедоступных полей, свойств и т. д., поскольку его там не должно быть.

0
ответ дан 23 November 2019 в 21:58
поделиться

Независимо от исходного вопроса, вы получите лучшую производительность, если несколько раз будете фиксировать ссылки на локальные переменные, а не индексировать их в своем списке:

AllIntegerIDs ids = new AllIntegerIDs();
ids.m_MessageID = (int)IntegerIDsSubstring[IntOffset];
ids.m_MessageType = (int)IntegerIDsSubstring[IntOffset + 1];
ids.m_ClassID = (int)IntegerIDsSubstring[IntOffset + 2];
ids.m_CategoryID = (int)IntegerIDsSubstring[IntOffset + 3];
ids.m_MessageText = MessageTextSubstring;
integerList.Add(ids);

И в вашем для loop:

for (int cnt3 = 0 ; cnt3 < integerList.Count ; cnt3++) //<----PROBLEM HERE
{
   AllIntegerIDs ids = integerList[cnt3];
   Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\n",
      ids.m_MessageID,ids.m_MessageType,ids.m_ClassID,ids.m_CategoryID, ids.m_MessageText);
}
0
ответ дан 23 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: