Csharp/C#教程:从IEnumerable 集合中删除项目分享


从IEnumerable 集合中删除项目

我有一个popuplated IEnumerable集合。

我想从中删除一个项目,我该怎么做?

 foreach(var u in users) { if(u.userId = 1123) { // remove! } } 

我知道你不应该在循环时删除,所以我不介意创建新集合或删除它。

但我不知道如何删除一个项目,由于某种原因丢失了!

或者我也很困惑,我怎么能创建一个新的集合,如:

 IEnumerable modifiedUsers = new List(); foreach(var u in users) { if(u.userId != 1233) { modifiedUsers.add ?????? } } 

如何添加到集合中?

不删除但使用LINQ创建没有该元素的新List

 // remove users = users.Where(u => u.userId != 123).ToList(); // new list var modified = users.Where(u => u.userId == 123).ToList(); 

您无法从IEnumerable删除项目; 它只能被枚举,如下所述: http : //msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx

如果要添加和删除项目,则必须使用ICollection 。 也许你可以尝试投射你的IEnumerable ; 如果底层对象实现了ICollection`,这当然会起作用。

有关ICollection更多信息,请参阅此处: http : //msdn.microsoft.com/en-us/library/92t2ye13.aspx

当然,您可以从IEnumerable中创建一个新列表,正如lante所指出的那样,但这可能是“次优”,具体取决于您的实际用例。

ICollection可能是要走的路。

尝试将IEnumerable转换为List 。 从这一点开始,您将能够使用ListRemove方法删除项目。

要使用Linq将其作为参数传递给Remove方法,您可以通过以下方法获取该项:

代码如下:

 users = users.ToList(); // Get IEnumerable as List users.Remove(users.First(x => x.userId == 1123)); // Remove item // Finished 

你不能。 IEnumerable只能迭代。

在第二个示例中,您可以通过迭代它的副本从原始集合中删除

 foreach(var u in users.ToArray()) // ToArray creates a copy { if(u.userId != 1233) { users.Remove(u); } } 

IEnumerable接口就是可枚举的 – 它根本不提供AddRemove或修改列表的任何方法。

接口只提供了迭代某些项的方法 – 大多数需要枚举的实现都将实现IEnumerable例如List

为什么不在没有隐式转换为IEnumerable情况下使用您的代码

 // Treat this like a list, not an enumerable List modifiedUsers = new List(); foreach(var u in users) { if(u.userId != 1233) { // Use List.Add modifiedUsers.Add(u); } } 

您无法删除IEnumerable元素,但可以使用Enumerable.Skip方法

上述就是C#学习教程:从IEnumerable 集合中删除项目分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/958172.html

(0)
上一篇 2021年11月22日
下一篇 2021年11月22日

精彩推荐