2012-10-17 9 views
5

Esiste una funzione che consente di aggiungere un elemento a List<T> e recuperare l'indice come int? List<T>.Add() è un void e non restituisce un valore.Come aggiungere un elemento all'Elenco <T> e recuperare l'indice?

List.Count-1 è una soluzione quando non si lavora con i thread. La mia lista è un membro statico e si può accedere con thread multipli alla volta e usare il valore count-1 è totalmente thread non sicuro e potrebbe facilmente portare a risultati errati.

L'indice verrà utilizzato per il trattamento specifico di ciascun elemento.

Grazie!

+2

La domanda è, il thread 'List.Add' è sicuro? –

+2

Dovresti invece utilizzare una delle raccolte simultanee? – CookieOfFortune

risposta

10

I metodi di elenco non sono thread-safe da solo; se chiami ripetutamente lo List.Add da più thread potresti incorrere in problemi. È necessario utilizzare una sorta di tecnica di sincronizzazione se si sta per utilizzare un List in primo luogo, quindi si potrebbe anche includere una chiamata a List.Count all'interno di quella sezione critica.

L'altra opzione sarebbe quella di utilizzare una raccolta progettata per essere utilizzata da più thread, come quelli in System.Collections.Concurrent.

+2

+1 - Ma solo una nota che 'System.Collections.Concurrent' è disponibile solo per .NET 4.0 – keyboardP

+0

@keyboardP Sì, ecco perché l'ho elencato come una sola alternativa. – Servy

+0

Bene, l'aggiornamento a .Net 4.0 non è facile. Ma la soluzione vale la pena accettarla –

0

se si desidera un indice thread-safe è necessario il blocco poiché le persone potrebbero aver eliminato un elemento/modificato l'elenco anche se si dispone dell'indice.

Detto questo, si potrebbe provare list.IndexOf (valore), che restituisce l'indice di valore (supponendo che tutti gli elementi sono unici)

-2

credo che la lista ha un metodo indexOf(), in modo da poter chiamare dopo aver aggiunto l'elemento all'elenco in questo modo:

list.add(element); 
int index = list.indexOf(element); 
+3

Supponendo che l'elemento non sia nell'elenco più volte .. – Servy

+1

Per non parlare della grande O di indexOf() è O (N). – CookieOfFortune

+1

quando il tuo elemento è una collezione, non è molto saggio usare tale metodo (per quanto riguarda le dimensioni della raccolta), specialmente se si usano i thread –

Problemi correlati