Kod*_*oda 2 .net c# linq where
与使用集合Where()方法相比,使用LinQ进行过滤是否有任何区别.
进一步来说,
第一
var numQuery = from num in numbers
where (num % 2) == 0
select num;
Run Code Online (Sandbox Code Playgroud)
第二
var numQuery = numbers.Where(num => num % 2 == 0);
Run Code Online (Sandbox Code Playgroud)
在上面的查询中,哪个更好?是否有任何性能考虑?
谢谢.
没有区别.第一个是Query TypeLINQ.第二个是Extension Method类型.我更喜欢第二个,因为它有许多内置功能.
从下面的链接
"......但是方法语法和查询语法之间没有语义差异."
不,没有任何区别(就像约翰所指出的那样).
为了说服任何不愿意相信的人,我已经检查了哪些IL代码是生成的,并且它完全相同(下面针对那些好奇的人发布):
IL_0001: ldc.i4.4
IL_0002: newarr System.Int32
IL_0007: dup
IL_0008: ldtoken {A078DB01-D7BE-45F4-8D98-8D2FA673C282}.$$method0x6000001-1
IL_000D: call System.Runtime.CompilerServices.RuntimeHelpers.InitializeArray
IL_0012: stloc.0
IL_0013: ldloc.0
IL_0014: ldsfld UserQuery.CS$9__CachedAnonymousMethodDelegate1
IL_0019: brtrue.s IL_002E
IL_001B: ldnull
IL_001C: ldftn b__0
IL_0022: newobj System.Func..ctor
IL_0027: stsfld UserQuery.CS$9__CachedAnonymousMethodDelegate1
IL_002C: br.s IL_002E
IL_002E: ldsfld UserQuery.CS$9__CachedAnonymousMethodDelegate1
IL_0033: call System.Linq.Enumerable.Where
IL_0038: stloc.1
IL_0039: ldloc.1
IL_003A: call LINQPad.Extensions.Dump
b__0:
IL_0000: ldarg.0
IL_0001: ldc.i4.2
IL_0002: rem
IL_0003: ldc.i4.0
IL_0004: ceq
IL_0006: stloc.0
IL_0007: br.s IL_0009
IL_0009: ldloc.0
IL_000A: ret
Run Code Online (Sandbox Code Playgroud)