c# - c# 中是否有在整个集合上调用接口方法的快捷方式?
问题描述
我在一次采访中被问到这个问题。
假设有一个包含项目的 ac# 集合,所有项目都实现了一个包含方法 Update() 的接口 IUpdatable。如何在单个语句中调用所有项目的更新方法,在 C# 中是一个单行?
我确实尝试了 foreach on collection 并以这种方式在每个项目上调用 update() 。采访者说,这更像是一个初级开发者的风格。他想要一些简短的东西,在一行中。
我当时没有意识到,但这里有两种情况。如果集合还不是collection<IUpdatable> 类型,则首先需要一个类型转换步骤来将集合从说collection<object> 转换为collection<IUpdatable>。执行此操作的任何快捷方式?
解决方案
我不同意你的面试官,因为一些今天看起来很简单的事情明天会成为其他开发人员的头痛。
我建议使用List<T>.ForEach
方法
对 List 的每个元素执行指定的操作。
iemyList.ForEach(p => myFunc(p));
但它仅在 上可用List<T>
,而不是IList<T>
或IEnumerable<T>
所以,如果你的收藏不同,你可以做一个这样的把戏myList.ToList().ForEach(e => ...);
更新
是的,如果需要,您可能希望将项目投射到IUpdatable
ieEnumerable.Cast<T>
或Select(e => (IUpdatable)e)
此外,您可以使用 TPL和类似的东西Parallel.ForEach
Parallel.ForEach(myList, p =>
{
//Your stuff
});
但我不确定并行执行是否在桌面上
我希望它有帮助
推荐阅读
- android - 如何从不是 JSON 对象的 URL 中检索数据到 android listView 中?
- android - ImageView 中的 Vimeo 视频缩略图
- javascript - 从加权类别中选择唯一字符串的最有效方法
- json - Crossfilter - 从 localStorage 加载 JSON 文件
- django - 无法从我的模型中检索字段
- c++ - 获取此对象的原始类型
- javascript - NodeJS时区不一致的行为
- c# - DataGridViewCheckBox 行在单击复选框之前返回 null
- ios - 在对象数组中搜索字符串
- javascript - JS 最有效和安全地检查来自用户的价值,而不会得到未定义 - 使用迷你函数