2009-11-08 12 views
5

Musiałem zmienić na mojej linii kodu wokół. I przedtem coś takiegoJak usunąć obiekt z kolekcji list?

// this is in a static method. 
List<string> mySTring = new List<string>(); 

mySTring.add("one"); 
mySTring.add("two"); 

jednak na jednej z moich stron Mam dropdownlist, który nie wymaga pola „dwa”, więc zamiast pisać kod duplikat wszystko zrobiłem było

myString.remove("two"); 

teraz muszę zmienić moją listę do List<SelectListItem> myList = new List<SelectListItem>();

Więc muszę to teraz wygląda tak:

List<SelectListItem> myList = new List<SelectListItem>() 
      { 
       new SelectListItem() { Text = "one", Value = "one"}, 
       new SelectListItem() { Text = "two", Value = "two"}, 
      }; 

Więc jak mogę usunąć selectListItem, który zawiera "dwa"? Wiem, że prawdopodobnie mógłbym użyć polecenia usunięcia według indeksu. Ale mogę dodać do listy w przyszłości, więc nie chcę zacząć polować i zmieniać go, jeśli indeks się zmieni.

Dzięki

Odpowiedz

8

List<T> jest domyślnie będzie porównanie odwołań do obiektów (chyba SelectListItem realizuje niestandardową metodę równości). Więc jeśli nie masz jeszcze odniesienie do drugiego elementu wokół, będziesz musiał dostać albo przez odniesienie, lub przez znalezienie pożądany przedmiot:

var item = myList.First(x=>x.Value == "two"); 
myList.Remove(item); 

Index może być łatwiejsze ...

+0

hmm ufałem teraz musisz go poszukać. Nie będę już mieć odniesienia, myślę, że usunę go przez indeks lub przez znalezienie. Nie wiem, czego użyć. Po prostu zaniepokojony w przyszłości dodaję coś do mojej listy kolekcji i nagle jest to inny indeks i staram się dowiedzieć, dlaczego to nie działa i to jest powód. – chobo2

+1

Również, w jaki sposób działa metoda sortowania kolekcji list? Ponieważ używałem metody sortowania na mojej liście łańcuchów (to dlatego obawiam się, że indeks się zmieni). – chobo2

+0

Zawsze możesz użyć innego pojemnika, który nie wymaga wyszukiwania przez brutalną siłę. – spender

6

można użyć metody RemovalAll:

myList.RemoveAll(i => i.Text == "two"); 

Oczywiście to będzie pozbyć wszystkich elementy, których „Text” własność jest „dwa”, ale skoro używasz go w Co. mboBox Zakładam, że będziesz mieć tylko jeden przedmiot dla każdej wartości "Tekstu".

0

możemy dokonać wyboru myszy na div autouzupełniania dodając ten poniższy kod

do funkcji jquery autouzupełniania

tutaj Użyłem nazwy ID jako Requiredid

$("#Requiredid").autocomplete({focus:function(e,ui) { 
     document.getElementById('Requiredid').value = ui.item.label; 
     document.getElementById('hdnValue').value = ui.item.id;//If You need this value you //can add this line 
}}); 
Powiązane problemy