我有一个popuplated IEnumerable<User>集合.
我想从中删除一个项目,我该怎么做?
foreach(var u in users)
{
if(u.userId = 1123)
{
// remove!
}
}
Run Code Online (Sandbox Code Playgroud)
我知道你不应该在循环时删除,所以我不介意创建新集合或删除它.
但我不知道如何删除一个项目,因为某种原因丢失了!
或者我也很困惑,如何创建一个新的集合,如:
IEnumerable<User> modifiedUsers = new List<User>();
foreach(var u in users)
{
if(u.userId != 1233)
{
modifiedUsers.add ??????
}
}
Run Code Online (Sandbox Code Playgroud)
如何添加到集合中?
lan*_*nte 45
不删除但List使用LINQ 创建没有该元素的新元素:
// remove
users = users.Where(u => u.userId != 123).ToList();
// new list
var modified = users.Where(u => u.userId == 123).ToList();
Run Code Online (Sandbox Code Playgroud)
Wil*_*eer 16
您无法从中删除项目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 可能是要走的路.
小智 11
你可以这样做:
users = users.Where(x => x.userId != userIdToRemove);
Run Code Online (Sandbox Code Playgroud)
dut*_*tzu 10
试着把它IEnumerable变成一个List.从你这一点都将能够使用List的Remove方法来删除项目.
要将它作为参数传递给Remove使用Linq 的方法,您可以通过以下方法获取项目:
users.Single(x => x.userId == 1123) users.First(x => x.userId == 1123)代码如下:
users = users.ToList(); // Get IEnumerable as List
users.Remove(users.First(x => x.userId == 1123)); // Remove item
// Finished
Run Code Online (Sandbox Code Playgroud)
你不能。IEnumerable<T>只能迭代。
在第二个示例中,您可以通过迭代其副本来从原始集合中删除
foreach(var u in users.ToArray()) // ToArray creates a copy
{
if(u.userId != 1233)
{
users.Remove(u);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88337 次 |
| 最近记录: |