Изменить содержимое в foreach - PullRequest
1 голос
/ 14 мая 2009

Я склонен использовать ArrayLists структур. В этом случае очень легко перебирать список с помощью foreach.

Проблема, с которой я столкнулся, заключается в том, что я не могу использовать foreach для изменения содержимого структур, и мне приходится использовать типы for и messytype.

((dataStructure)files[x]).name = here;

Есть ли более удобный способ сделать это?

Ответы [ 4 ]

13 голосов
/ 14 мая 2009

Да, есть: не используйте нетипизированный ArrayList, эти типы устарели в пользу универсальных типов в System.Collections.Generic. В вашем случае: List<T>.

Вы все еще не можете использовать его в сочетании с циклом foreach для изменения значений структуры, но, по крайней мере, вам не нужно приводить.

7 голосов
/ 14 мая 2009

Я знаю, это звучит упрощенно, но просто скажите нет изменяемым типам значений .

Они почти никогда правильное решение проблемы. Есть очень несколько исключений, но классы почти всегда путь.

Кроме того, если вы действительно используете ArrayList, то вы уже понесете расходы на распаковку ... (Как говорит Конрад, если вы можете использовать .NET 2.0, используйте универсальные шаблоны).

Если вы действительно настаиваете на использовании изменяемых структур, тогда используйте for цикл вместо foreach. Но, пожалуйста, все равно переходите на занятия.

1 голос
/ 14 мая 2009

Используйте универсальную версию ArrayList: List<DataStructure>.

Так все выглядит намного лучше:

files[x].name = here;
0 голосов
/ 16 августа 2012

Да, бывают случаи, когда List <T> также бесполезен. В этих случаях работает самый старый трюк в руководстве. Вместо foreach вы должны использовать цикл while:

while (listItem.Count >0)
{
//do operation with 0th element of List Item always like
 deletefunc(lisItem[0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...