Domanda

Io tendo ad usare ArrayLists di strutture. E 'quindi molto facile per scorrere la lista con un foreach.

Il problema che ho è non posso usare un foreach di modificare i contenuti strutture e devono usare un e typecasts disordinato.

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

C'è un modo più ordinato di farlo?

È stato utile?

Soluzione

So che questo suona semplicistico, ma solo dire di no a tipi di valore mutabili .

Sono quasi non la giusta soluzione al problema. Ci sono un molto poche eccezioni, ma le classi sono quasi sempre la strada da percorrere.

Inoltre, se siete veramente utilizzando un ArrayList allora sarete incorrere già un costo unboxing ... (Come dice Konrad, se è possibile utilizzare NET 2.0 quindi utilizzare farmaci generici.)

Se proprio insistete sul usando strutture mutevoli, quindi utilizzare un ciclo for invece di foreach. Ma per favore, si prega di passare a classi in ogni caso.

Altri suggerimenti

Sì, c'è: non utilizzare un ArrayList non tipizzato, questi tipi sono deprecati in favore dei tipi generici in System.Collections.Generic. Nel tuo caso:. List<T>

È ancora non è possibile utilizzarlo in combinazione con un foreach ciclo per modificare i valori di struttura, ma almeno non si deve lanciare.

Utilizzare la generico versione di ArrayList:. List<DataStructure>

In questo modo le cose sembrano molto meglio:

files[x].name = here;

Sì, ci sono casi in cui List <T>, inoltre, non è utile. In questi casi il trucco più vecchio nei lavori manuali. Invece di foreach, si dovrebbe usare ciclo while:

while (listItem.Count >0)
{
//do operation with 0th element of List Item always like
 deletefunc(lisItem[0]);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top