c# - 如果适用,将嵌套的 ForEach 替换为 Select

标签 c# .net linq extension-methods ienumerable

是否可以替换方法 ForEach()Select() 一起使用或者用嵌套的扩展方法在一个字符串中编写下一个代码?或者也许还有其他方法可以改进算法?

var list = new List<IStatementParser>();

System.IO.Directory.GetFiles(path, "*.dll")
    .ForEach(f => System.Reflection.Assembly.LoadFrom(f)
        .GetTypes()
        .Where(t => !t.IsInterface && typeof(IFoo).IsAssignableFrom(t))
        .ForEach(t => list.Add((IFoo)Activator.CreateInstance(t))));

return list.ToDictionary(k => k.Name, v => v.GetType());

它从 path 中的程序集中加载所有类实现 IFoo并将它们添加到 Dictionary<string, Type>其中字符串是 IFoo.Name

最佳答案

var foos =
    from dllFile in Directory.GetFiles(path, "*.dll")
    from type in Assembly.LoadFrom(dllFile).GetTypes()
    where !type.IsInterface && typeof(IFoo).IsAssignableFrom(type)
    select (IFoo) Activator.CreateInstance(type);

return foos.ToDictionary(foo => foo.Name, foo => foo.GetType());

关于c# - 如果适用,将嵌套的 ForEach 替换为 Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331343/

相关文章:

.net - 在.NET远程调用期间识别客户端

c# - getResponse 后页面加载但不重定向

.net - NUnit "missing"GPSVC.DLL 在 Windows 7/64

c# - String[] 中的部分匹配

c# - 相当于C#中php的list()

c# - 关于 c#.net 应用程序与 MySql 通信的问题

c# - 如何使用 Xamarin 在 iOS 13 中获取设备 token ?

c# - HTTPS POST Web 服务请求格式 - 在子节点内插入多个值

c# - 如何对两个集合相交的每个项目进行自定义比较

c# - 如何让 webDriver 等待页面加载(C# Selenium 项目)