Windows Phone 7 IEnumerableT.Select和SelectMany的区别
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实现同样的功能,看看两者的区别。
- <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
- <ListBox Name="Output"
- HorizontalAlignment="Stretch"
- VerticalAlignment="Stretch"
- Margin="10" />
- <ListBox Name="Output2"
- HorizontalAlignment="Stretch"
- VerticalAlignment="Stretch"
- Margin="200,10,10,10" />
- </Grid>
cs页面
- namespace LinqApplication
- {
- public partial class MainPage : PhoneApplicationPage
- {
- List<Book> Books;//List<T>继承了IEnumerable<T> 接口
- public MainPage()
- {
- InitializeComponent();
- CreateBooks();
- //IEnumerable<Book>.Select 将序列中的Authors元素投影到新表中。
- IEnumerable<List<Author>> EnumerableOfListOfAuthors = Books.Select(book => book.Authors);
- foreach (var listOfAuthors in EnumerableOfListOfAuthors)
- {
- foreach (Author auth in listOfAuthors)
- {
- Output.Items.Add(auth.Name); //添加到ListBox里面
- }
- }
- //IEnumerable<Book>.SelectMany 将序列的每个元素投影到 IEnumerable<T> 并将结果序列合并为一个序列。
- IEnumerable<Author> authors = Books.SelectMany(book => book.Authors);
- foreach (Author auth in authors)
- {
- Output2.Items.Add(auth.Name);
- }
- }
- private void CreateBooks()
- {
- Books = new List<Book>();
- Author auth1 = new Author() { Name = "张三", Age = 32 };
- Author auth2 = new Author() { Name = "李四", Age = 30 };
- Author auth3 = new Author() { Name = "加菲猫", Age = 31 };
- List<Author> authors = new List<Author>() { auth1, auth2, auth3 };
- Book newnewBook = new Book() { Authors = authors, NumPages = 500, Title = "Programming C#" };
- Books.Add(newBook); auth1 = new Author() { Name = "刘德华", Age = 42 };
- authors = new List<Author>() { auth1 };
- newnewBook = new Book() { Authors = authors, NumPages = 350, Title = "Book 2" };
- Books.Add(newBook); auth1 = new Author() { Name = "周杰伦", Age = 32 };
- auth2 = new Author() { Name = "林志玲", Age = 32 };
- authors = new List<Author>() { auth1, auth2 };
- newnewBook = new Book() { Authors = authors, NumPages = 375, Title = "Programming with WP7" };
- Books.Add(newBook);
- }
- }
- }
Author.cs类
- namespace LinqApplication
- {
- public class Author
- {
- public string Name;
- public int Age;
- }
- }
Book.cs类
- namespace LinqApplication
- {
- public class Book
- {
- public String Title { get; set; }
- public List<Author> Authors { get; set; }
- public int NumPages { get; set; }
- }
- }
转载于:https://blog.51cto.com/linzheng/1078631
Windows Phone 7 IEnumerableT.Select和SelectMany的区别相关推荐
- Select()和SelectMany()的区别
Select与SelectMany的区别 Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值. Select() 为每个源值生成一个结果值.因此,总体结果是一个与源 ...
- NET问答:Select 和 SelectMany 的区别
咨询区 Tarik: 我已经 google 搜索了 Select 和 SelectMany 之间的区别,但我并没有找到合适的答案,我现在急切的需要知道在 Linq to SQL 时两者的区别而不是给我 ...
- C#中IEnumerableT.Select()、SelectMany()的简单使用
本文主要用来记录.让自己有所了解和提升,以后遗忘时可以查看,关于SelectMany(),这篇文章写得不错,值得一看. 话不多说,先上代码看 Select() public class Person ...
- IEnumerable.Select和SelectMany的区别
例子(一个人可以有多个手机) public class People{public string Name { get; set; }public List<Phone> Phone { ...
- Select和SelectMany之间的区别
我一直在搜索Select和SelectMany之间的区别,但我一直找不到合适的答案. 我需要学习使用LINQ To SQL的区别,但我发现的只是标准数组示例. 有人可以提供LINQ To SQL示例吗 ...
- linq里的select和selectmany操作 投影运算
原文地址:https://msdn.microsoft.com/zh-cn/library/bb546168.aspx#Mtps_DropDownFilterText 投影运算 其他版本 投影是指将对 ...
- spark dataframe的select和selectexpr的区别
对比: spark dataframe的select和selectexpr的区别 select是把要遍历的集合ienumerable逐一遍历,每次返回一个t,合并之后直接返回一个ienumerable ...
- select 和epoll模型区别
1.select 和epoll模型区别 1.1.网络IO模型概述 通常来说,网络IO可以抽象成用户态和内核态之间的数据交换.一次网络数据读取操作(read),可以拆分成两个步骤:1)网卡驱动等待数据准 ...
- windows.onload和body的onload属性的区别
关于windows.onload和body的onload属性的区别网上有些说法说的也不太统一,现在系统说下: 先看共同点: 都是body内容体加载结束执行: window.onload 内部方式可以 ...
最新文章
- 深度学习之父Hinton:下一代神经网络
- 学习笔记97—matlab 获取矩阵中特定值的坐标
- Windows 之 删除文件出现“该项目不在请确认该项目的位置”
- 中国海外投资在非洲市场的开放政策
- Spark MaprLab-Auction Data分析
- LeetCode 1953. 你可以工作的最大周数
- 信息学奥赛C++语言:求三位数的值
- 关于大型网站技术演进的思考(八)--存储的瓶颈终篇(8)
- SQL语句使用总结(一)
- 硬质合金销售真的有那么难么?
- pass 软件_以信息化为支撑,合理用药为保障,我院 PASS合理用药系统正式上线!...
- Qt网络编程——TCP
- 新华字典mysql_数据库优化篇---MySql索引优化详解
- 用C++实现布线问题
- 新版DAEMON Tools Lite打不开 bin 文件解决方法
- WPS表格常用快捷键大全
- 计算机图形学与图像处理图形学的研究内容
- 英语背单词软件测试初学者,从背单词APP测试,看中学生背单词的那些弯路
- 快速上手Ubuntu之安装常用软件篇——打造一个满足基本娱乐办公的Ubuntu
- U-boot中怎么添加配置菜单选项