conteúdos Modificar na foreach
Pergunta
I tendem a usar ArrayLists de estruturas. Em seguida, é muito fácil de percorrer a lista com um foreach.
O problema que tenho é que eu não posso usar um foreach para modificar o conteúdo estruturas e tem que usar um para e typecasts desarrumado.
((dataStructure)files[x]).name = here;
Existe uma maneira mais arrumado para fazê-lo?
Solução
Eu sei que isso soa simplista, mas apenas dizer não aos tipos mutáveis ??valor .
Eles são quase não a solução certa para o problema. Há um muito algumas exceções, mas as classes são quase sempre o caminho a percorrer.
Além disso, se você está realmente usando um ArrayList
então você vai ser incorrer um custo unboxing já ... (Como Konrad diz, se você pode usar o .NET 2.0, em seguida, usar os genéricos.)
Se você realmente insistir em usar estruturas mutáveis, em seguida, usar um loop for
vez de foreach
. Mas, por favor, por favor mude para aulas de qualquer maneira.
Outras dicas
Sim, existe: não usar um ArrayList
untyped, estes tipos são preteridos em favor dos tipos genéricos em System.Collections.Generic
. No seu caso:. List<T>
Você ainda não pode usá-lo em conjunto com um loop foreach
modificar valores de estrutura, mas pelo menos você não tem que elenco.
Use o genérico versão do ArrayList
:. List<DataStructure>
Desta forma, as coisas parecem muito melhor:
files[x].name = here;
Sim, há casos em que List <T>
também não é útil. Nesses casos, o truque mais velho dos trabalhos manuais. Em vez de foreach
, você deve usar enquanto loop:
while (listItem.Count >0)
{
//do operation with 0th element of List Item always like
deletefunc(lisItem[0]);
}