Aray Dinamico

martedì 27 gennaio 2009 - 15.40

toniovigi Profilo | Expert

Ciao a tutti,
m sono soffermato sul seguente problema
ho la mia winapplication che al suo avvio crea un array di button
Button[] ipet
ipet = new Button[cont];

cont e una variabile che prende in ingresso Datagridview1.rows.count e quindi il numero d righe del mio database

Ora io ho creato una funzioen che mi aggiunge un record al mio database
quindi di conseguenza voglio far si che anche l'array diventi con il numero nuovo quindi cont+1,
che codice devo mettere??Non capisco come "allargare" l'array dato che è una cosa a runtime,
perchp se no il nuovo valore dell'array lo avrei RIlanciando l'applicazione,spero di essere stato chiaro
Grazie

Antonio

Jeremy Profilo | Guru

In vb esiste il Redim Preserve che ridimensiona un array preservandone,appunto il contenuto.....in c# non esiste, quindi, devi crearti una funzioncina che faccia ciò che ti serve..
Da qualche parte avevo già dato questo consiglio, se mi dai il tempo lo cerco e te lo posto..

[edit]
Questo è il consiglio che avevo dato
In c# non esiste, come in vb, il Redim Preserve che ti permetterebbe di ridichiarare un array con le nuove dimensioni del vettore preservandone il contenuto(pur avendo però un calo di prestazioni).....però puoi usare una lista ed, aggiungere degli elementi (in questo caso String) con il metodo Add
Oppure farti, a manina, il Redim Preserve.....quindi ti crei una funzione, al quale passi la tua array, che ti restituisce un nuovo array delle dimensioni da te volute.....il Preserve potresti farlo appoggiandoti ad un array temporaneo nel quale memorizzerai temporaneamente(appunto) il contenuto di quella originale per poi restituirlo come risultato della Function.

Prova avedere se ti ci raccapezzi...altrimenti fammi sapere
Ciao
[/endedit]

toniovigi Profilo | Expert

cazzo,a me sembrava che c# potevi fare molte più cose,invece vb.net...ha guarda caso tutto quello che serve a me,va bene..adex provo a vedere cosa riesco a fare,grx cmq!!

aiedail92 Profilo | Expert

Ciao

Invece che scrivere a mano il ReDim del VB.Net, puoi usare il metodo Array.Resize, in questo modo:

Button[] ipet; ipet = new Button[cont]; int newSize = ipet.Length + 10; Array.Resize(ref ipet, newSize);

Oppure invece che usare un array, puoi usare una List<Button>, che fornisce l'equivalente di un array, ma con autoincremento delle dimensioni:

List<Button> ipet = new List<Button>(); //Aggiunge un elemento ipet.Add(new Button()); //Ottiene un elemento Button b = ipet[0]; //Imposta un elemento ipet[0] = b; //Rimuove un elemento ipet.Remove(b);

Luca

Jeremy Profilo | Guru

Ciao aiedail...
a parte l'ottimo consiglio di usare ana list <button> al quale non avevo pensato....

>int newSize = ipet.Length + 10;
>Array.Resize(ref ipet, newSize);
ma in questo modo non perdi i valori già presente nell'array?

Ciao

aiedail92 Profilo | Expert

>ma in questo modo non perdi i valori già presente nell'array?

No, il metodo provvede automaticamente a ricopiare i vecchi valori nell'array ridimensionato... Gli unici dati che vengono persi sono quelli che vengono tagliati fuori se la nuova dimensione è inferiore alla vecchia.

Luca

Jeremy Profilo | Guru

Quindi è questo..l'equivalente del ReDim Preserve del Vb in C#
Grazie
Ciao..
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5