¿Cómo agregar un elemento al comienzo de la Lista <T>?

417

Quiero agregar una opción "Seleccionar uno" a una lista desplegable vinculada a un List<T>.

Una vez que pregunto por List<T>, ¿cómo agrego mi inicial Item, no parte de la fuente de datos, como el PRIMER elemento en eso List<T>? Yo tengo:

// 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;
Máquina de la ceniza
fuente

Respuestas:

719

Use el método Insertar :

ti.Insert(0, initialItem);
Matt Hamilton
fuente
8
@BrianF, sí, tienes razón. Doc:This method is an O(n) operation, where n is Count.
23W
44
@ 23W Probablemente debería vincular a la página en inglés si va a vincular a MSDN.
mbomb007
¿Sería posible insertar al final de la lista?
Gary Henshall
3
@GaryHenshall sí, use el Addmétodo, se inserta al final.
Martin Asenov
2
Desde .NET 4.7.1, puede usar Append()y Prepend(). Verifique esta respuesta
aloisdg se muda a codidact.com el
24

Actualización: una mejor idea, establezca la propiedad "AppendDataBoundItems" en verdadero, luego declare el "Elegir elemento" declarativamente. La operación de enlace de datos se agregará al elemento declarado estáticamente.

<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

-Oisina

x0n
fuente
2
Eso es muy bonito. El OP no especificó ASP.NET, pero es un buen truco para saber.
Matt Hamilton
5

Desde .NET 4.7.1, puede usar el efecto secundario libre Prepend()y Append(). La salida será un 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 se muda a codidact.com
fuente
4

Utilizar List<T>.Insert

Si bien no es relevante para su ejemplo específico, si el rendimiento es importante, también considere usarlo LinkedList<T>porque insertar un elemento al comienzo de un List<T>requiere que se muevan todos los elementos. Consulte Cuándo debo usar una lista frente a una lista enlazada .

hijo
fuente
3

Utilice el método de inserción de List<T>:

Método List.Insert (Int32, T): Insertsun elemento en la Lista en el specified index.

var names = new List<string> { "John", "Anna", "Monica" };
names.Insert(0, "Micheal"); // Insert to the first element
Sina Lotfi
fuente