2009-11-08 2 views
5

Мне пришлось менять свои строки кода. Я, прежде чем что-то вроде этогоКак удалить объект из коллекции списков?

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

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

Однако на одном из моих страниц у меня есть DropDownList, который не требует поля «два», так вместо того, чтобы писать код дубликата все, что я сделал

myString.remove("two"); 

сейчас Мне нужно, чтобы изменить свой список на List<SelectListItem> myList = new List<SelectListItem>();

Так что я теперь, глядя, как это:

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

Итак, как мне удалить selectListItem, который содержит «два»? Я знаю, что, возможно, я могу использовать удаление по индексу. Но я мог бы добавить в список в будущем, поэтому я не хочу начинать поиск и изменять его, если индекс изменяется.

Благодаря

ответ

8

List<T> есть, по умолчанию, будет сравнивать ссылки на объект (если SelectListItem не реализует специальный метод равенства). Так что если вы до сих пор не имеете ссылку на второй пункт вокруг, вы будете иметь, чтобы получить его либо по ссылке, либо найти нужный пункт:

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

индекса может быть проще ...

+0

СММ надеялись теперь их нужно искать. У меня больше не будет ссылок, я думаю, что сделаю удаление по индексу или путем поиска. Не уверен, что использовать. Просто в будущем я добавляю что-то в свою коллекцию списков, и внезапно это другой показатель, и я пытаюсь понять, почему он не вокал, и в этом причина. – chobo2

+1

Также как будет работать метод сортировки списка List? Потому что я использовал метод sort в моем списке строк (вот почему меня беспокоит, что индекс изменится). – chobo2

+0

Ну, вы всегда можете использовать другой контейнер, который не требует поиска грубой силой. – spender

6

вы можете использовать RemovalAll метод:

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

Очевидно, что это будет избавиться от всех элементов, для которых «текста» свойство «два», но так как вы используете его в Co mboBox Я предполагаю, что у вас будет только один элемент для каждого значения «Текст».

0

мы можем сделать выбор мыши над автозаполнением DIV, добавив этот следующий код

в функцию JQuery автозаполнения

здесь я использовал имя идентификатора в качестве 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 
}}); 
Смежные вопросы