簡體   English   中英

Linq Puzzle:如何將這個foreach轉換為linq語法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM