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

Posted

技术标签:

【中文标题】如何将项目添加到 List<T> 的开头?【英文标题】:How to add item to the beginning of List<T>? 【发布时间】:2010-09-28 06:38:32 【问题描述】:

我想在绑定到List&lt;T&gt; 的下拉列表中添加“选择一个”选项。

查询List&lt;T&gt; 后,如何将我的初始Item(不是数据源的一部分)添加为List&lt;T&gt; 中的第一个元素?我有:

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

【问题讨论】:

【参考方案1】:

使用Insert 方法:

ti.Insert(0, initialItem);

【讨论】:

@BrianF,是的,你是对的。文档:This method is an O(n) operation, where n is Count. @23W 如果您要链接到 MSDN,您可能应该链接到英文页面。 @GaryHenshall 是的,使用Add 方法,它插入到最后。 从 .NET 4.7.1 开始,您可以使用Append()Prepend()。 Check this answer 这是否会替换列表中已有的现有值?【参考方案2】:

更新:一个更好的主意,将“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/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx

-奥辛

【讨论】:

这很酷。 OP 没有指定 ASP.NET,但这是一个很好的技巧。【参考方案3】:

从 .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 ));

【讨论】:

这个解决方案在使用 enumerable 时是最好的 所有列表都实现了 IEnumerable,但是 prepend 和 append 都将返回一个 IEnumerable。这可能是也可能不是您想要的。【参考方案4】:

使用List&lt;T&gt;插入方法:

List.Insert 方法 (Int32, T):Inserts 将一个元素插入到 specified index 的 List 中。

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

【讨论】:

【参考方案5】:

使用List&lt;T&gt;.Insert

虽然与您的具体示例无关,但如果性能很重要,还可以考虑使用 LinkedList&lt;T&gt;,因为将项目插入到 List&lt;T&gt; 的开头需要移动所有项目。见When should I use a List vs a LinkedList。

【讨论】:

以上是关于如何将项目添加到 List<T> 的开头?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 < > 括起来的项目添加到文档注释中

如何将项目添加到 IEnumerable<T> 集合?

MVC - 将动态添加的控件绑定到模型中的 List<T>

如何将 null 添加到泛型列表? [复制]

在 Windows 窗体中将 list<T> 添加到列表框的类型错误

实体框架:绑定到 DataGridView 的 List<T> 添加回已删除对象以查看