关于lambda表达式的一个疑惑
private void LinqQuery()
{
int[] ints={1,2,3,4,5,6,7,8,9};
Response.Write("ints.SkipWhile(i => i < 5): <br />");
var values = ints.SkipWhile(i => i < 5);
foreach (var v in values)
Response.Write(v + ",");
Response.Write("<br /> ints.SkipWhile((x,i) => i < 5): <br />");
var values2=ints.SkipWhile((x,i) => i < 5);
foreach (var v in values2)
Response.Write(v + ",");
}
输出结果
ints.SkipWhile(i => i < 5):
5,6,7,8,9,
ints.SkipWhile((x,i) => i < 5):
6,7,8,9,
只是输入参数的变化,就导致结果不一样了。x没有用呀,我是新手请指教 --------------------编程问答-------------------- 对不起,我错了
应该是int[] ints={0,1,2,3,4,5,6,7,8,9};
这样显示结果就一样了,但是不知道那个(x,i)和i有没有区别 --------------------编程问答-------------------- 调用的是不同的SkipWhile方法,与lambda半点关系没有。 --------------------编程问答-------------------- 是动态生成2个委托对象? --------------------编程问答-------------------- int[] ints = { 91, 92, 93, 94, 95, 96, 97, 98, 99 };
var values2 = ints.SkipWhile((x,i) => i < 5).ToList();
输出:96/97/98/99
在这里i代表的是位置,而不是数值:
predicate:
用于测试每个源元素是否满足条件的函数;该函数的第二个参数表示源元素的索引。 --------------------编程问答-------------------- 所以:
(x,i)和i全完不同.
-------------------------
(x,i)x代表值,i代表位置
i i代表值 --------------------编程问答--------------------
这个不过是碰巧而己.
我倒有个新的问题
-------------------
IEnumerable是无序集合,虽然数组支持了IList接口,是有序集合,但操作是在IEnumerable上执行的,
public static IEnumerable<TSource> SkipWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
不知道是如何处理源元素的索引了? --------------------编程问答-------------------- var values2=ints.SkipWhile((x,i) => i < 5);
我认为的是i一开始是设置为0了,而其中的x是代表了ints中的元素 --------------------编程问答-------------------- 这样就通不过了:
using System;--------------------编程问答-------------------- 找到了,小问题.
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Test
{
static void Main()
{
int[] ints = { 91, 92, 93, 94, 95, 96, 97, 98, 99 };
IEnumerable ie = ints.Select(s => s);
var values = ie.SkipWhile(i => i < 5);
Console.ReadKey();
}
}
IEnumerable<int> ie = ints.Select(s => s);
--------------------编程问答-------------------- skip((x,i)=>i<5)
x是个元素,i可以理解为索引
skip(i=>i<5)
i是元素 --------------------编程问答--------------------
补充:.NET技术 , LINQ