elenco? dizionario? array?
-
22-07-2019 - |
Domanda
Sto cercando di trovare un modo molto semplice per memorizzare un valore booleano per ogni tabpage in un tabcontrol. ogni pagina ha una casella di testo e vorrei memorizzare una pagina bool foreach quindi se la pagina 1 è stata salvata, allora bool1 è impostato su true, altrimenti false e così via.
quindi quando vanno a chiudere il programma, si sposteranno su tutte le tabpage e vedranno se ogni tabpage è stata salvata o meno. devo essere in grado di creare una sorta di elenco che posso cercare e manipolare.
Ho precedentemente usato le proprietà dei tag per questo, ma per qualche motivo che non funziona più CORRETTAMENTE.
qualsiasi consiglio di aiuto sarebbe fantastico; y apprezzato :)
grazie
Bael.
Soluzione
Né l'array, né l'elenco, né il dizionario sono la struttura dati corretta per tracciare lo stato booleano di un insieme di oggetti. La struttura che fa questo e nient'altro è HashSet<T>
. Nel set è presente un T
oppure no.
È superiore a Dictionary<T, bool>
perché in realtà mantiene due stati: se l'oggetto è nel dizionario o meno, e se lo è, se il suo valore è vero o falso.
È superiore a <<> per due motivi: è più veloce (anche se nel tuo caso, sarà quasi sicuramente trascurabile), e non implica che ci sia un significato nell'ordine degli oggetti che contiene, poiché l'ordine degli oggetti in List<T>
è arbitrario.
Altri suggerimenti
List<TabPage>
Memorizza solo quelle schede che devono essere salvate. Se vuoto, non è necessario salvare nulla.
È possibile utilizzare ad esempio un Dictionary<TabPage,bool>
. All'inizio dell'applicazione:
var pageStates=new Dictionary<TabPage,bool>();
foreach(var page in tabControl.TabPages) {
pageStates.Add(page, false);
}
Per modificare lo stato di un TabPage:
pageStates[page]=true;
E al termine dell'applicazione:
foreach(var page in TabControl.TabPages) {
if(pageStates[page]) {
//The page is saved
}
}
Se stai iterando senza rimuovere o aggiungere elementi usa l'array.
Se stai ripetendo, ma aggiungendo e rimuovendo elementi, usa l'Elenco.
Se si utilizzano stringhe come chiavi, utilizzare il dizionario.
Il dizionario ha prestazioni di ricerca molto veloci con un numero elevato di elementi rispetto all'elenco.