Индексатор вернет копию значения. Внесение изменений в эту копию ничего не сделает со значением в словаре ... компилятор останавливает вас от написания багги-кода. Если вы хотите изменить значение в словаре, вам нужно будет использовать что-то вроде:
// Note: copying the contents to start with as you can't modify a collection
// while iterating over it
foreach (KeyValuePair<string, MapTile> pair in tilesData.ToList())
{
MapTile tile = pair.Value;
tile.bgFrame = tile.bgFrame >= tile.bgAnimation ? 0 : tile.bgFrame + 1;
tilesData[pair.Key] = tile;
}
Обратите внимание, что это также , избегая выполнения нескольких поисков без пользы Причина, по которой выполнялся ваш оригинальный код.
Лично я настоятельно рекомендую против иметь сменяемую структуру, чтобы начать с вас ...
Конечно, другой альтернативой является создание ссылочного типа, с которого вы могли бы использовать:
// If MapTile is a reference type...
// No need to copy anything this time; we're not changing the value in the
// dictionary, which is just a reference. Also, we don't care about the
// key this time.
foreach (MapTile tile in tilesData.Values)
{
tile.bgFrame = tile.bgFrame >= tile.bgAnimation ? 0 : tile.bgFrame + 1;
}
Как отметил @Fejs в комментарии, просто сделайте len(lstLine)
.
По split
вы получаете lstLine
как Python List
, len(lstLine)
подсчитывает количество элементов в списке.