正如我之前评论的那样,您可以使用myList.All(LessThan16Char)
.
请记住,这myList.All(LessThan16Char)
与myList.All(x => LessThan16Char(x))
.
第二个创建一个额外的间接。编译器转换x => LessThan16Char(x)
为一个方法,该方法获取一个字符串作为输入并调用LessThan16Char
它。
您可以看到生成的不同 IL。
1.myList.All(LessThan16Char)
IL_0008: ldarg.0
IL_0009: ldftn UserQuery.LessThan16Char
IL_000F: newobj System.Func<System.String,System.Boolean>..ctor
IL_0014: call System.Linq.Enumerable.All
2.myList.All(x=> LessThan16Char(x))
IL_001B: ldarg.0
IL_001C: ldftn UserQuery.<Main>b__0_0
IL_0022: newobj System.Func<System.String,System.Boolean>..ctor
IL_0027: call System.Linq.Enumerable.All
和额外生成的方法
<Main>b__0_0:
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: call UserQuery.LessThan16Char
IL_0007: ret
通常它们都做同样的事情,但在某些情况下它们可能会有所不同。例如,当您想知道包含传递给 LINQ 查询的方法的类并且您正在传递int.Parse
而不是x => int.Parse(x)
. 第二个是类中的方法,但第一个是框架类。