Comment ajouter un élément au début de la liste <T>?

417

Je veux ajouter une option "Select One" à une liste déroulante liée à un List<T>.

Une fois que j'ai demandé le List<T>, comment puis-je ajouter mon initiale Item, ne faisant pas partie de la source de données, en tant que PREMIER élément List<T>? J'ai:

// 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;
Machine à cendres
la source

Réponses:

719

Utilisez la méthode Insert :

ti.Insert(0, initialItem);
Matt Hamilton
la source
8
@BrianF, oui vous avez raison. Doc:This method is an O(n) operation, where n is Count.
23W
4
@ 23W Vous devriez probablement créer un lien vers la page en anglais si vous souhaitez créer un lien vers MSDN.
mbomb007
Serait-il possible d'insérer à la fin de la liste?
Gary Henshall
3
@GaryHenshall oui, utilisez la Addméthode, il insère à la fin.
Martin Asenov
2
Depuis .NET 4.7.1, vous pouvez utiliser Append()et Prepend(). Vérifiez cette réponse
aloisdg passe à codidact.com le
24

Mise à jour: une meilleure idée, définissez la propriété «AppendDataBoundItems» sur true, puis déclarez «Choisir l'élément» de manière déclarative. L'opération de liaison de données s'ajoutera à l'élément déclaré statiquement.

<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

-Oisine

x0n
la source
2
C'est plutôt cool. L'OP n'a pas spécifié ASP.NET mais c'est une bonne astuce à savoir.
Matt Hamilton
5

Depuis .NET 4.7.1, vous pouvez utiliser les effets secondaires free Prepend()et Append(). La sortie va être 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 passe à codidact.com
la source
4

Utilisation List<T>.Insert

Bien que cela ne soit pas pertinent pour votre exemple spécifique, si les performances sont importantes, envisagez également d'utiliser LinkedList<T>car l'insertion d'un élément au début d'un List<T>nécessite le déplacement de tous les éléments. Voir Quand dois-je utiliser une liste par rapport à une LinkedList .

fiston
la source
3

Utilisez la méthode d' insertion de List<T>:

List.Insert, méthode (Int32, T): Insertsun élément dans la liste à la specified index.

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