Como adicionar um item ao início da Lista <T>?


417

Quero adicionar uma opção "Selecionar uma" a uma lista suspensa vinculada a a List<T>.

Depois de consultar o List<T>, como adiciono minha inicial Item, não parte da fonte de dados, como o PRIMEIRO elemento nisso List<T>? Eu tenho:

// 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;

Respostas:


719

Use o método Insert :

ti.Insert(0, initialItem);

8
@ BrianF, sim, você está certo. Doc:This method is an O(n) operation, where n is Count.
23W 15/02

4
@ 23W Você provavelmente deveria ter um link para a página em inglês se quiser vincular ao MSDN.
Mbomb007

Seria possível inserir no final da lista?
precisa

3
@ GaryHenshall sim, use o Addmétodo, ele insere no final.
Martin Asenov

2
Desde o .NET 4.7.1, você pode usar Append()e Prepend(). Confira esta resposta
aloisdg movendo-se para codidact.com 08/01

24

Atualização: para ter uma idéia melhor, defina a propriedade "AppendDataBoundItems" como true e, em seguida, declare o "Choose item" declarativamente. A operação de ligação de dados será adicionada ao item declarado estaticamente.

<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


2
Isso é bem legal. O OP não especificou o ASP.NET, mas é um bom truque para saber.
Matt Hamilton

5

Desde o .NET 4.7.1, você pode usar o efeito colateral gratuito Prepend()e Append(). A saída será um 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

Usar List<T>.Insert

Embora não seja relevante para o seu exemplo específico, se o desempenho for importante, considere também o uso, LinkedList<T>pois a inserção de um item no início de um List<T>requer que todos os itens sejam movidos. Consulte Quando devo usar uma lista versus uma lista vinculada .


3

Use o método Insert de List<T>:

Método List.Insert (Int32, T): Insertsum elemento na Lista no specified index.

var names = new List<string> { "John", "Anna", "Monica" };
names.Insert(0, "Micheal"); // Insert to the first element
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.