Ste*_*ris 5 .net c# linq compilation
考虑以下两个类似的代码示例.
一个where
条款.
bool validFactory
= fields
.Where(
fields => field.FieldType == typeof( DependencyPropertyFactory<T> ) &&
field.IsStatic )
.Any();
Run Code Online (Sandbox Code Playgroud)
两个where
条款.
bool validFactory
= fields
.Where( field => field.FieldType == typeof( DependencyPropertyFactory<T> ) )
.Where( field => field.IsStatic )
.Any();
Run Code Online (Sandbox Code Playgroud)
我更喜欢第二种,因为我发现它更具可读性,并且它导致更少的格式化问题,尤其是在使用自动格式化时.在单独条件(或甚至上方)旁边放置注释以澄清意图时也更清楚.
我的直觉说第二个代码样本的效率会降低.我当然可以自己写一个简单的测试(并且如果没人知道答案的话).现在我认为这是SO的完美食物.,p
Eri*_*ert 12
该编译器不会尝试优化连续的"地方"的电话.运行时库可以.如果你有一大堆"where"和"select"调用彼此相邻,运行时将尝试将它们重新组织成更有效的形式.
在一些不寻常的情况下,当然"优化"会使事情变得更糟.我似乎记得Jon Skeet最近写了一篇关于这篇文章的文章,尽管我不知道它在哪里.