我在Bill Wagners Book“Effective C#”中读到,人们应该支持比传统循环( for )更多的声明性选择语句。
例如:
int[] foo = new int[1000];
for (int i = 0; i < foo.Length; i++)
foo[i] = i * i;
是传统的命令式代码,而这将是声明性的Linq代码:
int[] foo2 = (from i in Enumerable.Range(0, 1000)
select i * i).ToArray();
作为一个老式的程序员,我更喜欢第一个版本。
问题是性能如何?我想第一个版本也更快。
答案 0 :(得分:3)
for
方式会更快!因为不会有任何LINQsided表达式树评估/优化等......
但使用select
获得的实际利润是“延期执行”。
当程序指针位于放置for
的代码部分时,for
循环将立即被执行。 select
语句只在需要时执行,并且只在需要时执行。