从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
。 从这一点开始,您将能够使用List
的Remove
方法删除项目。
要使用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
接口就是可枚举的 – 它根本不提供Add
或Remove
或修改列表的任何方法。
接口只提供了迭代某些项的方法 – 大多数需要枚举的实现都将实现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