Константа имеет другой тип (я знаю, что спецификация говорит, что 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;
), это сработает.
Если вы просто хотите получить доступ к последнему элементу в списке, вы можете выполнить
var item = integerList[integerList.Count - 1];
, чтобы получить общее количество элементов в списке, вы можете использовать свойство Count
var itemCount = integerList.Count;
Попробуйте использовать For Each вместо For для списков. Будет намного проще.
Измените
for (int cnt3 = 0 ; cnt3 <= integerList.FindLastIndex ; cnt3++)
на
for (int cnt3 = 0 ; cnt3 < integerList.Count; cnt3++)
Почему бы просто не использовать свойство Count в списке?
for(int cnt3 = 0; cnt3 < integerList.Count; cnt3++)
Используйте свойство Count
. Последним индексом будет Count - 1
.
for (int cnt3 = 0 ; cnt3 < integerList.Count; cnt3++)
Я бы согласился, что 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_
из ваших общедоступных полей, свойств и т. д., поскольку его там не должно быть.
Независимо от исходного вопроса, вы получите лучшую производительность, если несколько раз будете фиксировать ссылки на локальные переменные, а не индексировать их в своем списке:
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);
}