是否可以替换方法 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/