List<string> nameSpaceSuffixes = GetSuffixes();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach(var suffix in nameSpaceSuffixes)
{
if (assembly.GetName().Name.EndsWith(suffix))
Register(container, assembly, suffix);
}
}
答案 0 :(得分:6)
作为查询表达式:
var query = from assembly in AppDomain.CurrentDomain.GetAssemblies()
from suffix in namespaceSuffixes
where assembly.GetName().Name.EndsWith(suffix)
select new { assembly, suffix };
foreach (var result in query)
{
Register(container, result.assembly, result.suffix);
}
我没有放弃Ani使用List<T>.ForEach
的路线 - 我个人更喜欢使用普通的foreach
声明。 LINQ非常适合声明性查询; foreach
是对每个元素采取强制行动的神圣。
请注意,我的查询表达式几乎等同于Ani的点表示法; C#编译器将使用稍微不同的SelectMany
重载,这就是全部。在 this 特定情况下,我认为查询表达式更容易理解;在更简单的情况下,我更喜欢点符号。
答案 1 :(得分:1)
这可能不是最有效的,但是:
AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(assembly => nameSpaceSuffixes.Select(suffix =>
new { Assembly = assembly, Suffix = suffix }))
.Where(anon => anon.Assembly.GetName().Name.EndsWith(anon.Suffix))
.ToList()
.ForEach(anon => Register(container, anon.Assembly, anon.Suffix);