2009-11-08 14 views
5

Tuve que cambiar en mis líneas de código. Yo antes tenía algo como esto¿Cómo eliminar un objeto de una colección de listas?

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

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

Sin embargo, en una de mis páginas Tengo una lista desplegable que no requiere el campo "dos" por lo que en lugar de código duplicado escribir todo lo que hice fue

myString.remove("two"); 

Ahora tengo que cambiar mi lista a un List<SelectListItem> myList = new List<SelectListItem>();

Así que tengo ahora con este aspecto:

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

Entonces, ¿cómo elimino SelectListItem que contiene "dos"? Sé que probablemente podría usar eliminar por índice. Pero podría agregar a la lista en el futuro, así que no quiero comenzar a buscar y cambiarlo si el índice cambia.

Gracias

Respuesta

8

List<T> es, por defecto, van a comparar las referencias a objetos (a menos SelectListItem implementa un método de la igualdad de encargo). Así que a menos que usted todavía tiene una referencia al segundo punto alrededor, vas a tener que hacerlo, ya sea por referencia o por encontrar el elemento deseado:

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

índice puede ser más fácil ...

+0

hmm tenía la esperanza de ahora tiene que buscarlo. Ya no tendré la referencia, creo que haré eliminar por índice o por búsqueda. No estoy seguro de qué usar. Preocupado en el futuro, agrego algo a mi colección de listas y, de repente, es un índice diferente y estoy tratando de descubrir por qué no está funcionando y esa es la razón. – chobo2

+1

También, ¿cómo funcionaría el método de ordenación de la colección de listas en esto? Porque estaba usando el método de clasificación en mi lista de cadenas (por eso me preocupa que el índice cambie). – chobo2

+0

Bueno, siempre puedes usar un contenedor diferente que no requiera buscar por fuerza bruta. – spender

6

se puede utilizar el método de RemovalAll:

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

Obviamente, esto va a deshacerse de todos los artículos cuya propiedad "Texto" es "dos", pero ya se está usando en un Co mboBox Supongo que solo tendrá un artículo por cada valor de "Texto".

0

podemos hacer la selección del ratón sobre la div autocompletar añadiendo este código siguiente

en la función jQuery autocompletado

aquí he utilizado el nombre de identificación que 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 
}}); 
Cuestiones relacionadas