Linq Puzzle:如何将这个foreach转换为linq语法?

djm*_*jmc 2 c# linq foreach linq-to-objects

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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 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);
}
Run Code Online (Sandbox Code Playgroud)

我没有走下Ani的使用路线List<T>.ForEach- 我个人更喜欢使用正常的foreach声明.LINQ非常适合声明性查询; foreach是每个元素采取强制行动的神.

请注意,我的查询表达式几乎等同于Ani的点表示法; C#编译器将使用稍微不同的重载SelectMany,这就是全部.在这种特殊情况下,我认为查询表达式更容易理解; 在更简单的情况下,我更喜欢点符号.