[英]Linq Puzzle: How do I convert this foreach to linq syntax?
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);
}
}
作為查詢表達式:
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
重載,僅此SelectMany
。 在這種特殊情況下,我認為查詢表達式更易於理解。 在較簡單的情況下,我更喜歡點符號。
這可能不是最有效的,但是:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.