Bagaimana cara menambahkan item ke awal Daftar <T>?

417

Saya ingin menambahkan opsi "Pilih Satu" ke daftar drop-down yang terikat ke a List<T>.

Setelah saya meminta List<T>, bagaimana cara menambahkan inisial saya Item, bukan bagian dari sumber data, sebagai elemen PERTAMA dalam hal itu List<T>? Saya sudah:

// 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;
Mesin Abu
sumber

Jawaban:

719

Gunakan metode Sisipkan :

ti.Insert(0, initialItem);
Matt Hamilton
sumber
8
@ BrianF, Ya Anda benar. Doc:This method is an O(n) operation, where n is Count.
23W
4
@ 23W Anda mungkin harus menaut ke halaman bahasa Inggris jika Anda akan menautkan ke MSDN.
mbomb007
Apakah mungkin untuk memasukkan di akhir daftar?
Gary Henshall
3
@ GaryHenshall ya, gunakan Addmetode, itu menyisipkan di akhir.
Martin Asenov
2
Sejak .NET 4.7.1, Anda dapat menggunakan Append()dan Prepend(). Periksa jawaban ini
aloisdg pindah ke codidact.com
24

Perbarui: ide yang lebih baik, setel properti "AppendDataBoundItems" menjadi true, kemudian nyatakan "Pilih item" secara deklaratif. Operasi penyatuan data akan menambah item yang dinyatakan secara statis.

<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
sumber
2
Itu keren sekali. OP tidak menentukan ASP.NET tapi itu trik yang bagus untuk diketahui.
Matt Hamilton
5

Sejak .NET 4.7.1, Anda dapat menggunakan efek samping Prepend()dan gratis Append(). Outputnya akan menjadi 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 pindah ke codidact.com
sumber
4

Menggunakan List<T>.Insert

Meskipun tidak relevan dengan contoh spesifik Anda, jika kinerja penting juga pertimbangkan untuk menggunakan LinkedList<T>karena memasukkan item ke permulaan List<T>mengharuskan semua item dipindahkan. Lihat Kapan saya harus menggunakan Daftar vs LinkedList .

nak
sumber
3

Gunakan metode SisipkanList<T> :

Metode List.Insert (Int32, T): Insertselemen ke dalam List at the specified index.

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