Структура обновления в цикле foreach в C#

Не "неправильно" сделать это, и может быть более хорошо, если Ваши словари имеют большую вероятность того, чтобы превращаться в объекты в какой-то момент, но опасаться причин того, чтобы иметь доступ скобки во-первых:

  1. доступ Dot не может использовать ключевые слова в качестве ключей.
  2. доступ Dot должен использовать Допустимые символы идентификатора Python в ключах.
  3. Словари могут содержать любой hashable элемент - не, просто представляет в виде строки.

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

Для случая как это я принял бы значение по умолчанию к "молитве" количеств удобочитаемости: по-видимому, другие Python программисты будут читать Ваш код, и они, вероятно, не будут ожидать гибриды словаря/объекта везде. Если бы это - хорошее проектное решение для конкретной ситуации, используйте его, но я не использовал бы его без необходимости сделать так.

7
задан AJ. 23 October 2009 в 10:29
поделиться

3 ответа

Примерно то, что он говорит, компилятор не позволит вам изменять (частично) переменную цикла в foreach.

Просто используйте:

for(int i = 0; i < things.Count; i+= 1) //  for each file
{
    things[i].Name = "xxx";
}

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

9
ответ дан 6 December 2019 в 10:01
поделиться

Структура - это не ссылочный тип, а тип значения.

Если бы у вас был класс вместо struct для Вещь , цикл foreach создаст для вас ссылочную переменную, которая будет указывать на правильный элемент в вашем списке. Но поскольку это тип значения, он работает только с копией вашего Thing , которая в данном случае является переменной итерации.

7
ответ дан 6 December 2019 в 10:01
поделиться

Структура - это тип значения, а класс - это ссылочный тип. Вот почему он компилируется, когда это класс, но не когда это структура

Подробнее: http://www.albahari.com/valuevsreftypes.aspx

2
ответ дан 6 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

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