Як додати елемент до початку Список <T>?


417

Я хочу додати параметр "Вибрати один" до випадаючого списку, пов'язаного з a List<T>.

Як тільки я запитую про те List<T>, як я можу додати свій початковий Item, а не частину джерела даних, як ПЕРШИЙ елемент у цьому 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

Використовуйте метод Вставка :

ti.Insert(0, initialItem);

8
@BrianF, так, ти маєш рацію. Док .:This method is an O(n) operation, where n is Count.
Вт

4
@ 23W Ви, ймовірно, повинні посилатися на англійську сторінку, якщо ви збираєтесь покласти на MSDN.
mbomb007

Чи можна було б вставити в кінці списку?
Гері Хеншалл

3
@GaryHenshall так, використовуйте Addметод, він вставляється в кінці.
Мартін Асенов

2
Оскільки .NET 4.7.1, ви можете використовувати Append()і Prepend(). Перевірте цю відповідь
aloisdg переходить на codidact.com

24

Оновлення: краща ідея, встановіть властивість "AppendDataBoundItems" на "true", а потім декларативно оголосіть "Select item". Операція зв’язування даних додасть статично оголошений елемент.

<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


2
Це досить круто. ОП не вказав 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 ));

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.