Wie füge ich ein Element am Anfang von Liste <T> hinzu?

417

Ich möchte einer Dropdown-Liste, die an a gebunden ist, die Option "Select One" hinzufügen List<T>.

List<T>Wie füge ich nach der Abfrage von das meine Initiale Item, nicht einen Teil der Datenquelle, als ERSTES Element hinzu List<T>? Ich habe:

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

Antworten:

719

Verwenden Sie die Insert- Methode:

ti.Insert(0, initialItem);
Matt Hamilton
quelle
8
@BrianF, ja du hast recht. Doc:This method is an O(n) operation, where n is Count.
23W
4
@ 23W Sie sollten wahrscheinlich auf die englische Seite verlinken, wenn Sie auf MSDN verlinken möchten.
mbomb007
Wäre es möglich, am Ende der Liste einzufügen?
Gary Henshall
3
@ GaryHenshall ja, benutze die AddMethode, sie wird am Ende eingefügt .
Martin Asenov
2
Seit .NET 4.7.1 können Sie Append()und verwenden Prepend(). Überprüfen Sie diese Antwort
aloisdg wechselt zu codidact.com
24

Update: Eine bessere Idee: Setzen Sie die Eigenschaft "AppendDataBoundItems" auf "true" und deklarieren Sie das Element "Element auswählen" deklarativ. Der Datenbindungsvorgang wird dem statisch deklarierten Element hinzugefügt.

<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
quelle
2
Das ist ziemlich toll. Das OP hat ASP.NET nicht angegeben, aber das ist ein guter Trick.
Matt Hamilton
5

Seit .NET 4.7.1 können Sie die Nebenwirkung kostenlos Prepend()und nutzen Append(). Die Ausgabe wird eine IEnumerable sein.

// 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 wechselt zu codidact.com
quelle
4

Verwenden List<T>.Insert

Obwohl dies für Ihr spezielles Beispiel nicht relevant ist, sollten Sie bei Verwendung der Leistung auch die Verwendung in Betracht ziehen, LinkedList<T>da für das Einfügen eines Elements am Anfang von a List<T>alle Elemente verschoben werden müssen. Siehe Wann soll ich eine Liste vs einem LinkedList verwenden .

Sonny
quelle
3

Verwenden Sie die Einfügemethode von List<T>:

List.Insert-Methode (Int32, T): InsertsEin Element in die Liste am specified index.

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