如何将项目添加到List <T>的开头?


417

我想在绑定到的下拉列表中添加“选择一个”选项List<T>

一旦查询了List<T>,该如何将我的初始Item数据而不是数据源的一部分添加为其中的FIRST元素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;

Answers:


719

使用插入方法:

ti.Insert(0, initialItem);

8
@BrianF,是的,您是对的。Doc:This method is an O(n) operation, where n is Count.
23W

4
@ 23W如果您要链接到MSDN,则可能应该链接到英文页面。
mbomb007 '17

可以在列表末尾插入吗?
Gary Henshall'Dec

3
@GaryHenshall是的,请使用Add方法,它会在最后插入。
Martin Asenov '18

2
从.NET 4.7.1开始,您可以使用Append()Prepend()检查这个答案
aloisdg移至codidact.com

24

更新:更好的主意,将“ AppendDataBoundItems”属性设置为true,然后以声明方式声明“ Choose item”。数据绑定操作将添加到静态声明的项目中。

<asp:DropDownList ID="ddl" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Value="0" Text="Please choose..."></asp:ListItem>
</asp:DropDownList>

http://msdn.microsoft.com/zh-CN/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx

-Oisin


2
太酷了。OP没有指定ASP.NET,但这是一个很好的技巧。
马特·汉密尔顿,

5

从.NET 4.7.1开始,您可以使用free 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>因为在a的开头插入项目List<T>需要将所有项目移到上方。请参阅何时应该使用列表与LinkedList


3

使用以下方法的插入方法List<T>

List.Insert方法(Int32,T):Inserts列表中元素的位置specified index

var names = new List<string> { "John", "Anna", "Monica" };
names.Insert(0, "Micheal"); // Insert to the first element
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.