Как добавить элемент в начало списка <T>?

417

Я хочу добавить опцию «Выбрать один» в выпадающий список, связанный с List<T>.

Как только я запрашиваю List<T>, как я могу добавить свой начальный Item, а не часть источника данных, как элемент FIRST в этом List<T>? Я имею:

// populate ti from data               
List<MyTypeItem> ti = MyTypeItem.GetTypeItems();    
//create initial entry    
MyTypeItem initialItem = new MyTypeItem();    
initialItem.TypeItem = "Select One";    
initialItem.TypeItemID = 0;
ti.Add(initialItem)  <!-- want this at the TOP!    
// then     
DropDownList1.DataSource = ti;
Пепельная Машина
источник

Ответы:

719

Используйте метод Insert :

ti.Insert(0, initialItem);
Мэтт Гамильтон
источник
8
@BrianF, да, ты прав. Док:This method is an O(n) operation, where n is Count.
23W
4
@ 23W Вам, вероятно, следует перейти на английскую страницу, если вы собираетесь ссылаться на MSDN.
mbomb007
Можно ли будет вставить в конец списка?
Гари
3
@GaryHenshall да, используйте Addметод, он вставляется в конце.
Мартин Асенов
2
Начиная с .NET 4.7.1, вы можете использовать Append()и Prepend(). Проверьте этот ответ
aloisdg переходит на codidact.com
24

Обновление: лучшая идея, установить для свойства "AppendDataBoundItems" значение true, а затем декларативно объявить "Выбрать элемент". Операция привязки данных добавит к статически объявленному элементу.

<asp:DropDownList ID="ddl" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Value="0" Text="Please choose..."></asp:ListItem>
</asp:DropDownList>

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx

-Oisin

x0n
источник
2
Это круто. В OP не указан ASP.NET, но это хороший трюк.
Мэтт Гамильтон
5

Начиная с .NET 4.7.1, вы можете использовать побочные эффекты бесплатно Prepend()и Append(). Выход будет IEnumerable.

// Creating an array of numbers
var ti = new List<int> { 1, 2, 3 };

// Prepend and Append any value of the same type
var results = ti.Prepend(0).Append(4);

// output is 0, 1, 2, 3, 4
Console.WriteLine(string.Join(", ", results ));
aloisdg переходит на codidact.com
источник
4

использование List<T>.Insert

Хотя это не относится к вашему конкретному примеру, если производительность важна, также подумайте об использовании, LinkedList<T>потому что вставка элемента в начало List<T>требует перемещения всех элементов. Посмотрите, Когда я должен использовать Список против LinkedList .

сынок
источник
3

Используйте метод вставкиList<T> :

Метод List.Insert (Int32, T): Insertsэлемент в списке в specified index.

var names = new List<string> { "John", "Anna", "Monica" };
names.Insert(0, "Micheal"); // Insert to the first element
Сина Лотфи
источник