วิธีเพิ่มรายการในตอนต้นของรายการ <T>


417

ฉันต้องการเพิ่มตัวเลือก "เลือกหนึ่ง" List<T>เพื่อรายการแบบหล่นลงผูกไว้กับที่

เมื่อฉันค้นหาฉันList<T>จะเพิ่มเริ่มต้นของฉันItemไม่ใช่ส่วนหนึ่งของแหล่งข้อมูลเป็นองค์ประกอบแรกในนั้นได้List<T>อย่างไร ฉันมี:

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

คำตอบ:


719

ใช้วิธีการแทรก :

ti.Insert(0, initialItem);

8
@BrianF ใช่คุณพูดถูก หมอ:This method is an O(n) operation, where n is Count.
23W

4
@ 23W คุณควรเชื่อมโยงไปยังหน้าภาษาอังกฤษหากคุณกำลังจะเชื่อมโยงไปยัง MSDN
mbomb007

มันจะเป็นไปได้ที่จะแทรกในตอนท้ายของรายการหรือไม่
Gary Henshall

3
@GaryHenshall ใช่ใช้Addวิธีมันแทรกในตอนท้าย
Martin Asenov

2
ตั้งแต่ .NET 4.7.1 คุณสามารถใช้และAppend() ตรวจสอบคำตอบนี้Prepend()
aloisdg กำลังย้ายไปยัง codidact.com

24

อัปเดต: เป็นแนวคิดที่ดีกว่าตั้งค่าคุณสมบัติ "AppendDataBoundItems" เป็นจริงจากนั้นประกาศ "เลือกรายการ" อย่างชัดเจน การดำเนินการ databinding จะเพิ่มไปยังรายการที่ประกาศแบบคงที่

<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


2
มันเท่ห์มาก OP ไม่ได้ระบุ ASP.NET แต่เป็นเคล็ดลับที่ดีที่จะรู้
Matt Hamilton

5

ตั้งแต่ .NET 4.7.1, คุณสามารถใช้ผลข้างเคียงฟรีและPrepend() Append()ผลลัพธ์จะเป็น 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

ใช้ List<T>.Insert

แม้ว่าจะไม่เกี่ยวข้องกับตัวอย่างที่เฉพาะเจาะจงของคุณหากประสิทธิภาพเป็นสิ่งสำคัญให้พิจารณาใช้LinkedList<T>เพราะการแทรกรายการไปที่จุดเริ่มต้นของList<T>รายการทั้งหมดจะต้องย้าย ดูเมื่อฉันควรใช้รายการเทียบ LinkedList


3

ใช้วิธีแทรกของList<T>:

วิธี List.Insert (Int32, T): องค์ประกอบลงในรายการที่ได้Insertsspecified index

var names = new List<string> { "John", "Anna", "Monica" };
names.Insert(0, "Micheal"); // Insert to the first element
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.