2012-10-17 4 views
5

Czy istnieje funkcja, która umożliwia dodanie elementu do List<T> i przywrócenie indeksu jako int? List<T>.Add() to void i nie zwraca wartości.Jak dodać element do listy <T> i odzyskać indeks?

List.Count-1 to rozwiązanie, gdy nie pracujesz z wątkami. Moja lista to statyczny element członkowski, do którego można uzyskać dostęp z wieloma wątkami naraz, a użycie wartości count-1 jest całkowicie wątkowo niebezpieczne i może łatwo doprowadzić do złych wyników.

Indeks zostanie użyty do specjalnego traktowania każdego elementu.

Dziękujemy!

+2

Pytanie brzmi, czy wątek 'List.Add' jest bezpieczny? –

+2

Czy zamiast tego używasz jednej z jednoczesnych kolekcji? – CookieOfFortune

Odpowiedz

10

liście nie są nawlec sam bezpieczny; jeśli po prostu dzwonisz pod numer List.Add z kilku wątków, możesz napotkać problemy. Musisz użyć jakiejś techniki synchronizacji, jeśli zamierzasz używać najpierw List, więc równie dobrze możesz zawrzeć połączenie z List.Count wewnątrz tej krytycznej sekcji.

Inną opcją będzie użycie kolekcji zaprojektowanej do używania przez wiele wątków, takich jak te w System.Collections.Concurrent.

+2

+1 - Ale tylko uwaga, że ​​'System.Collections.Concurrent' jest dostępna tylko dla .NET 4.0 – keyboardP

+0

@keyboardP Yep, dlatego wymieniłem to jako jedną alternatywę. – Servy

+0

Aktualizacja do .Net 4.0 nie jest łatwa. Ale rozwiązanie jest warte akceptacji –

0

Jeśli chcesz indeks wątku bezpieczny, musisz zablokować, ponieważ ludzie mogli usunąć element/zmienił listę, nawet jeśli masz indeks.

Powiedział, że można spróbować list.IndexOf (wartość), która zwraca indeks wartości (zakładając, że wszystkie elementy są unikatowe)

-2

Wierzę, że lista ma metodę indexOf(), więc można go nazwać po dodaniu elementu do listy jak ten: metody

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

Założenie, że element nie znajduje się na liście wiele razy. – Servy

+1

Nie wspominając już o dużej O of indexOf() to O (N). – CookieOfFortune

+1

kiedy twój element jest zbiorem, nie jest rozsądnie używać takiej metody (w odniesieniu do rozmiaru kolekcji), szczególnie jeśli używasz wątków –

Powiązane problemy