IEnumerable<T>在Windows Phone 7的程序上很常用,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单迭代,下面主要分析一下 IEnumerable<T>.Select和IEnumerable<T>.SelectMany这两个方法的区别。

IEnumerable<T>.Select 将序列中的每个元素投影到新表中。

IEnumerable<T>.SelectMany 将序列的每个元素投影到 IEnumerable<T> 并将结果序列合并为一个序列。

SelectMany 方法枚举输入序列,使用转换函数将每个元素映射到 IEnumerable<T>,然后枚举并生成每个这种 IEnumerable<T> 对象的元素。 也就是说,对于 source 的每个元素,selector 被调用,返回一个值的序列。 然后 SelectMany将集合的此二维集合合并为一维 IEnumerable<T> 并将其返回。

下面一个小例子用IEnumerable<T>.Select和IEnumerable<T>.SelectMany实现同样的功能,看看两者的区别。

  1. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  2. <ListBox  Name="Output"
  3. HorizontalAlignment="Stretch"
  4. VerticalAlignment="Stretch"
  5. Margin="10" />
  6. <ListBox  Name="Output2"
  7. HorizontalAlignment="Stretch"
  8. VerticalAlignment="Stretch"
  9. Margin="200,10,10,10" />
  10. </Grid>

cs页面

  1. namespace LinqApplication
  2. {
  3. public partial class MainPage : PhoneApplicationPage
  4. {
  5. List<Book> Books;//List<T>继承了IEnumerable<T> 接口
  6. public MainPage()
  7. {
  8. InitializeComponent();
  9. CreateBooks();
  10. //IEnumerable<Book>.Select 将序列中的Authors元素投影到新表中。
  11. IEnumerable<List<Author>> EnumerableOfListOfAuthors = Books.Select(book => book.Authors);
  12. foreach (var listOfAuthors in EnumerableOfListOfAuthors)
  13. {
  14. foreach (Author auth in listOfAuthors)
  15. {
  16. Output.Items.Add(auth.Name); //添加到ListBox里面
  17. }
  18. }
  19. //IEnumerable<Book>.SelectMany  将序列的每个元素投影到 IEnumerable<T> 并将结果序列合并为一个序列。
  20. IEnumerable<Author> authors = Books.SelectMany(book => book.Authors);
  21. foreach (Author auth in authors)
  22. {
  23. Output2.Items.Add(auth.Name);
  24. }
  25. }
  26. private void CreateBooks()
  27. {
  28. Books = new List<Book>();
  29. Author auth1 = new Author() { Name = "张三", Age = 32 };
  30. Author auth2 = new Author() { Name = "李四", Age = 30 };
  31. Author auth3 = new Author() { Name = "加菲猫", Age = 31 };
  32. List<Author> authors = new List<Author>() { auth1, auth2, auth3 };
  33. Book newnewBook = new Book() { Authors = authors, NumPages = 500, Title = "Programming C#" };
  34. Books.Add(newBook); auth1 = new Author() { Name = "刘德华", Age = 42 };
  35. authors = new List<Author>() { auth1 };
  36. newnewBook = new Book() { Authors = authors, NumPages = 350, Title = "Book 2" };
  37. Books.Add(newBook); auth1 = new Author() { Name = "周杰伦", Age = 32 };
  38. auth2 = new Author() { Name = "林志玲", Age = 32 };
  39. authors = new List<Author>() { auth1, auth2 };
  40. newnewBook = new Book() { Authors = authors, NumPages = 375, Title = "Programming with WP7" };
  41. Books.Add(newBook);
  42. }
  43. }
  44. }

Author.cs类

  1. namespace LinqApplication
  2. {
  3. public class Author
  4. {
  5. public string Name;
  6. public int Age;
  7. }
  8. }

Book.cs类

  1. namespace LinqApplication
  2. {
  3. public class Book
  4. {
  5. public String Title { get; set; }
  6. public List<Author> Authors { get; set; }
  7. public int NumPages { get; set; }
  8. }
  9. }

转载于:https://blog.51cto.com/linzheng/1078631

Windows Phone 7 IEnumerableT.Select和SelectMany的区别相关推荐

  1. Select()和SelectMany()的区别

    Select与SelectMany的区别 Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值. Select() 为每个源值生成一个结果值.因此,总体结果是一个与源 ...

  2. NET问答:Select 和 SelectMany 的区别

    咨询区 Tarik: 我已经 google 搜索了 Select 和 SelectMany 之间的区别,但我并没有找到合适的答案,我现在急切的需要知道在 Linq to SQL 时两者的区别而不是给我 ...

  3. C#中IEnumerableT.Select()、SelectMany()的简单使用

    本文主要用来记录.让自己有所了解和提升,以后遗忘时可以查看,关于SelectMany(),这篇文章写得不错,值得一看. 话不多说,先上代码看 Select() public class Person ...

  4. IEnumerable.Select和SelectMany的区别

    例子(一个人可以有多个手机) public class People{public string Name { get; set; }public List<Phone> Phone { ...

  5. Select和SelectMany之间的区别

    我一直在搜索Select和SelectMany之间的区别,但我一直找不到合适的答案. 我需要学习使用LINQ To SQL的区别,但我发现的只是标准数组示例. 有人可以提供LINQ To SQL示例吗 ...

  6. linq里的select和selectmany操作 投影运算

    原文地址:https://msdn.microsoft.com/zh-cn/library/bb546168.aspx#Mtps_DropDownFilterText 投影运算 其他版本 投影是指将对 ...

  7. spark dataframe的select和selectexpr的区别

    对比: spark dataframe的select和selectexpr的区别 select是把要遍历的集合ienumerable逐一遍历,每次返回一个t,合并之后直接返回一个ienumerable ...

  8. select 和epoll模型区别

    1.select 和epoll模型区别 1.1.网络IO模型概述 通常来说,网络IO可以抽象成用户态和内核态之间的数据交换.一次网络数据读取操作(read),可以拆分成两个步骤:1)网卡驱动等待数据准 ...

  9. windows.onload和body的onload属性的区别

    关于windows.onload和body的onload属性的区别网上有些说法说的也不太统一,现在系统说下: 先看共同点: 都是body内容体加载结束执行: window.onload 内部方式可以 ...

最新文章

  1. 深度学习之父Hinton:下一代神经网络
  2. 学习笔记97—matlab 获取矩阵中特定值的坐标
  3. Windows 之 删除文件出现“该项目不在请确认该项目的位置”
  4. 中国海外投资在非洲市场的开放政策
  5. Spark MaprLab-Auction Data分析
  6. LeetCode 1953. 你可以工作的最大周数
  7. 信息学奥赛C++语言:求三位数的值
  8. 关于大型网站技术演进的思考(八)--存储的瓶颈终篇(8)
  9. SQL语句使用总结(一)
  10. 硬质合金销售真的有那么难么?
  11. pass 软件_以信息化为支撑,合理用药为保障,我院 PASS合理用药系统正式上线!...
  12. Qt网络编程——TCP
  13. 新华字典mysql_数据库优化篇---MySql索引优化详解
  14. 用C++实现布线问题
  15. 新版DAEMON Tools Lite打不开 bin 文件解决方法
  16. WPS表格常用快捷键大全
  17. 计算机图形学与图像处理图形学的研究内容
  18. 英语背单词软件测试初学者,从背单词APP测试,看中学生背单词的那些弯路
  19. 快速上手Ubuntu之安装常用软件篇——打造一个满足基本娱乐办公的Ubuntu
  20. U-boot中怎么添加配置菜单选项

热门文章

  1. (连续)周期信号的傅里叶级数(FS)
  2. centos 7 安装jdk1.8
  3. 04. Mybatis的resultMap基本应用
  4. hibernate的实现原理
  5. CountUp.js – 让数字以非常有趣的动画方式显示
  6. Oracle笔记(十三) 视图、同义词、索引
  7. WP7 开发(十) 处理Html标记
  8. 计算机知识的更新速度,笔记本电脑硬盘如何升级?要容量还是速度?这些知识你需要学会...
  9. 5.3.2 TCP连接管理
  10. 4.3.8 DHCP协议