×

Discussion Board

Results 1 to 2 of 2
  1. #1
    Registered User
    Join Date
    Jan 2013
    Posts
    32

    Windows Phone 通过Orderby与Count熟悉lamda

    有人问题这个问题,这里总结一下,以便新人查询

    问题是ObservableCollection的OrderBy和Count很难理解:

    Code:
    ObservableCollection<string> oc = new ObservableCollection<string>();
    oc.Add("abc");
    oc.Add("dec");
    oc.Add("zhongguo");
    oc.Add("beijing");
    var oc2 = oc.OrderBy(item => item);
    int count = oc.Count(item => item == "beijing");

    解答:

    1. lambda表达式的格式一般是 (input parameters) => expression 他们构成了类似一个函数,括号里面的是参数,如果参数只有一个那么括号可以省略,=》符号右侧是expression,要执行的代码,expression的结果就是返回值

    2. 比如item => item,那么参数是item,表达式和返回值都是item 通过VS的Goto Definition看OrderBy的定义,它要求第一个参数是IEnumerable,第二个参数是Func<TSource, TKey> keySelector 也就是说它希望的参数是一个func,这个func的返回值是排序的key, 而你的func是item=>item,它的返回值是item,所以key就是item。

    3. 在来看item=>item=="beijing",它的参数是item,表达式是item=="beijing",返回值是bool(true/false) 再看Count的定义,它要求第二个参数为Func<TSource, bool> predicate 也就是说它希望参数是一个func,这个func的返回值是bool,是一个Predicate。 总结一下就是: public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); 这个函数,枚举source中每一个item,然后调用func检查item是否符合条件,如果符合条件就计数加1.

    4. 另外需要指出的是Func定义为:

    CODE]public delegate TResult Func<in T, out TResult>(
    T arg
    )
    [/CODE]
    也就是说模板中第一个是参数,第二个是返回值。

  2. #2
    Super Contributor
    Join Date
    Feb 2006
    Location
    Beijing
    Posts
    4,361

    Re: Windows Phone 通过Orderby与Count熟悉lamda

    谢谢分享~~~~~欢迎常来论坛。
    Stay Hungry. Stay Foolish.
    Sina Weibo:
    http://weibo.com/cxt728
    QQ Weibo:
    http://t.qq.com/Cxt_programmer

Similar Threads

  1. Replies: 14
    Last Post: 2013-03-18, 23:41
  2. Windows phone SDK
    By Mumtaz4Jihad in forum General Development Questions
    Replies: 1
    Last Post: 2011-10-25, 14:03
  3. Windows phone 7
    By 1xuname1x in forum [Archived] Qt SDKs and Tools
    Replies: 3
    Last Post: 2010-03-25, 12:50
  4. Replies: 1
    Last Post: 2002-07-16, 06:44

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
×