Не "неправильно" сделать это, и может быть более хорошо, если Ваши словари имеют большую вероятность того, чтобы превращаться в объекты в какой-то момент, но опасаться причин того, чтобы иметь доступ скобки во-первых:
Также имеют в виду, что можно всегда делать доступ объектов как словари, если Вы решаете переключиться на объекты позже.
Для случая как это я принял бы значение по умолчанию к "молитве" количеств удобочитаемости: по-видимому, другие Python программисты будут читать Ваш код, и они, вероятно, не будут ожидать гибриды словаря/объекта везде. Если бы это - хорошее проектное решение для конкретной ситуации, используйте его, но я не использовал бы его без необходимости сделать так.
Примерно то, что он говорит, компилятор не позволит вам изменять (частично) переменную цикла в foreach.
Просто используйте:
for(int i = 0; i < things.Count; i+= 1) // for each file
{
things[i].Name = "xxx";
}
И это работает, когда Thing
является классом, потому что тогда ваша циклическая переменная является ссылкой, и вы вносите изменения только в объект, на который указывает ссылка, а не в саму ссылку.
Структура - это не ссылочный тип, а тип значения.
Если бы у вас был класс
вместо struct
для Вещь
, цикл foreach создаст для вас ссылочную переменную, которая будет указывать на правильный элемент в вашем списке. Но поскольку это тип значения, он работает только с копией вашего Thing
, которая в данном случае является переменной итерации.
Структура - это тип значения, а класс - это ссылочный тип. Вот почему он компилируется, когда это класс, но не когда это структура
Подробнее: http://www.albahari.com/valuevsreftypes.aspx