首页 > 解决方案 > c# 中是否有在整个集合上调用接口方法的快捷方式?

问题描述

我在一次采访中被问到这个问题。

假设有一个包含项目的 ac# 集合,所有项目都实现了一个包含方法 Update() 的接口 IUpdatable。如何在单个语句中调用所有项目的更新方法,在 C# 中是一个单行?

我确实尝试了 foreach on collection 并以这种方式在每个项目上调用 update() 。采访者说,这更像是一个初级开发者的风格。他想要一些简短的东西,在一行中。

我当时没有意识到,但这里有两种情况。如果集合还不是collection<IUpdatable> 类型,则首先需要一个类型转换步骤来将集合从说collection<object> 转换为collection<IUpdatable>。执行此操作的任何快捷方式?

标签: c#linq

解决方案


我不同意你的面试官,因为一些今天看起来很简单的事情明天会成为其他开发人员的头痛。

我建议使用List<T>.ForEach方法

文档说:

对 List 的每个元素执行指定的操作。

iemyList.ForEach(p => myFunc(p)); 但它仅在 上可用List<T>,而不是IList<T>IEnumerable<T>

所以,如果你的收藏不同,你可以做一个这样的把戏myList.ToList().ForEach(e => ...);

更新

是的,如果需要,您可能希望将项目投射到IUpdatableieEnumerable.Cast<T>Select(e => (IUpdatable)e)

此外,您可以使用 TPL和类似的东西Parallel.ForEach

Parallel.ForEach(myList, p =>
{
    //Your stuff
});

但我不确定并行执行是否在桌面上

我希望它有帮助


推荐阅读