2016-06-29 1 views
4

Я наткнулся на этом заявлении:Итерация список объектов с Еогеаспом

«При использовании Еогеаспа в списке объектов, повторный экземпляр объекта не редактируемый, но свойства объекта являются редактируемые "

Возможно, кто-то продемонстрировал вышеприведенный пример, пожалуйста?

Позвольте мне еще раз фразу (как я нашел заявление в двух версиях), возможно, это утверждение более ясным:

«При использовании Еогеасп в списке элементов, в итерации переменной что предоставляет элемент чтения, но свойства элементов являются изменяемыми "

+0

Это означает, что сам список не может быть изменен (вы не можете удалить или добавить элементы, пока находитесь в цикле), но свойства элементов в списке могут быть изменены. Также читайте http://stackoverflow.com/questions/4004755/why-is-foreach-loop-read-only-in-c-sharp –

+0

, где вы нашли эту цитату? – Thorarins

+0

Я нашел, что в курсе о C# общих типах в PS (PS является аббревиатурой известного онлайн-провайдера курсов) – cnom

ответ

8
foreach(var foo in foos) 
{ 
    foo = null; // WRONG, foo is not editable 
    foo.name = "John"; // RIGHT, foo properties are editable 
} 
+0

Doesnt foo.name = "John" изменить экземпляр объекта ?? (поэтому экземпляр доступен для редактирования) – cnom

+2

@cnom, похоже, вы просто не понимаете, что такое [экземпляр] (http://stackoverflow.com/q/2219566/1997232). – Sinatr

+0

"... экземпляр объекта не редактируется, но свойства объекта редактируются ..." = "... foo не редактируется, но foo.name редактируется ..." –

0

Да

Foreach (n in list) if (n.something==true) list.Remove(n);

это потерпит неудачу

вы не можете удалить элемент в списке, в отличие скажем, цикл

0
foreach var car in cars 
{ 
    //you can edit car.color here 
    //you cannot edit car 
} 
1

Что означает, что элементы в списке могут 't изменить во время итерации, но содержимое элементов может.

это изменит коллекцию и предотвратить Еогеасп завершения:

foreach(var item in collection) 
{ 
    collection.Remove(item); 
} 

Это изменит элемент в списке и не допустить Еогеасп завершения:

foreach(var item in collection) 
{ 
    item.name = "Neil"; 
} 
+0

этот второй фрагмент относится к списку, а не к итерированному объекту! – cnom

+0

@cnom второй фрагмент ссылается на объект, а не на список! – Neil

+0

Жаль, что я имел в виду обратное, первый фрагмент относится к списку ... :) – cnom

0

Не уверен, что вам нужен пример для этого. Вы перейдете к каждому объекту в коллекции, и вы сможете делать то, что вам нравится в каждом из этих объектов, но вы не можете вносить изменения в саму коллекцию, например. Вставка, удаление, очистка и т. Д. Попытка таких действий выдает исключение.

 Смежные вопросы

  • Нет связанных вопросов^_^