当前位置:编程学习 > C#/ASP.NET >>

关于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代表值 --------------------编程问答--------------------
引用 1 楼 smith1985 的回复:
对不起,我错了
 应该是int[] ints={0,1,2,3,4,5,6,7,8,9};
 这样显示结果就一样了,但是不知道那个(x,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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,