c# - 如何从 C# 中的 lambda 表达式中删除列表项?
问题描述
如果我有这个
private static List<Action> actions = new List<Action>();
private static void Main()
{
for (var i = 0; i < 10; i += 1)
{
Action action = async () => {
// want to remove this specific lambda item from the "actions" variable.
// is there something like this:
/*
Action this_action = this;
actions.Remove(this_action);
*/
};
actions.Add(action);
}
Parallel.Invoke(actions.ToArray());
Console.Write("\nPress any key to exit...");
Console.ReadKey();
}
如何正确地将其从列表中删除。我需要某种自我参考吗?
注意:
刚刚运行的操作应该是要删除的操作。这些动作的完成顺序可能与它们添加到列表的顺序不同,但运行的动作应该是删除的动作。而且我不想同时删除它们,只有当它们完成时。
谢谢
解决方案
您可以只使用引用action
来删除操作的实例。闭包将确保引用指向正确的对象。
for (var i = 0; i < 10; i += 1)
{
Action action = null;
action = () => {
actions.Remove(action);
};
actions.Add(action);
}
Parallel.Invoke(actions.ToArray());
有关工作示例,请参阅Fiddle 。
推荐阅读
- angular - 反应式表单 - 在 valueChanges 上订阅/更新复选框选项
- c++ - 将 cppcheck 添加到 travis 构建中
- reactjs - React Fabric UI Pivot 在 PivotItem 更改时卸载组件
- node.js - 为什么 PM2 可以在一台服务器上运行,而不能在另一台服务器上运行?
- javascript - 如何在 reactstrap 中使用 onMouseEnter?
- asp.net-core - 在 .Net Core 2.2 中将 HttpResponseMessage 作为 IActionResult 返回的正确方法
- python - 我将如何对字典的第二个键的值进行排序?
- excel - 在 Excel 数据透视表中的已汇总组中搜索最小值
- leaflet - 单击标记时传单更改图层颜色
- java - 如何从 MaterialCardVew 中移除涟漪效应?