Windows Phone 7 IEnumerable<T>.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实现同样的功能,看看两者的区别。

 

 

 


 
 
  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.  
  13.             foreach (var listOfAuthors in EnumerableOfListOfAuthors)  
  14.             {   
  15.                 foreach (Author auth in listOfAuthors)  
  16.                 {  
  17.                     Output.Items.Add(auth.Name); //添加到ListBox里面  
  18.                 }  
  19.             }  
  20.  
  21.             //IEnumerable<Book>.SelectMany  将序列的每个元素投影到 IEnumerable<T> 并将结果序列合并为一个序列。  
  22.             IEnumerable<Author> authors = Books.SelectMany(book => book.Authors);  
  23.             foreach (Author auth in authors)   
  24.             {   
  25.                 Output2.Items.Add(auth.Name);  
  26.             }   
  27.  
  28.  
  29.         }  
  30.  
  31.         private void CreateBooks()   
  32.         {   
  33.             Books = new List<Book>();   
  34.             Author auth1 = new Author() { Name = "张三"Age = 32 };  
  35.             Author auth2 = new Author() { Name = "李四"Age = 30 };  
  36.             Author auth3 = new Author() { Name = "加菲猫"Age = 31 };  
  37.             List<Author> authors = new List<Author>() { auth1, auth2, auth3 };  
  38.  
  39.             Book newnewBook = new Book() { Authors = authorsNumPages = 500Title = "Programming C#" };  
  40.             Books.Add(newBook); auth1 = new Author() { Name = "刘德华"Age = 42 };  
  41.  
  42.             authors = new List<Author>() { auth1 };  
  43.             newnewBook = new Book() { Authors = authorsNumPages = 350Title = "Book 2" };  
  44.             Books.Add(newBook); auth1 = new Author() { Name = "周杰伦"Age = 32 };  
  45.  
  46.             auth2 = new Author() { Name = "林志玲"Age = 32 };   
  47.             authors = new List<Author>() { auth1, auth2 };  
  48.             newnewBook = new Book() { Authors = authorsNumPages = 375Title = "Programming with WP7" };   
  49.             Books.Add(newBook);  
  50.         }   
  51.     }  

Author.cs类

 


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

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.     }  

 



本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078631

相关文章
|
8月前
|
弹性计算 运维 安全
阿里云服务器Windows和Linux操作系统区别对比
阿里云服务器Windows和Linux操作系统区别对比,性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况。
|
8月前
|
存储 Windows
windows系统的符号链接和硬链接的区别
【5月更文挑战第27天】windows系统的符号链接和硬链接的区别
187 0
|
8月前
|
弹性计算 运维 安全
阿里云服务器linux和windows镜像有啥区别?
阿里云服务器linux和windows镜像有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
|
8月前
|
运维 安全 Linux
使用阿里云搭建幻兽帕鲁服务器操作系统类型Windows和Linux有区别吗?
使用阿里云搭建幻兽帕鲁服务器操作系统类型Windows和Linux有区别吗?性能有差异?同配置的游戏服务器,如4核16G或8核32G配置等,选择Windows和Linux操作系统差异不太大,如果非要对比的话,Linux系统相对Windows更少占用计算资源,当然如果对Linux不熟悉的话,可以选择Windows。另外,即便是幻兽帕鲁服务器创建成功后,也是可以免费修改操作系统的
214 1
|
8月前
|
弹性计算 运维 安全
阿里云服务器镜像怎么选?Linux和Windows有啥区别?
阿里云服务器镜像怎么选?Linux和Windows有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
278 0
|
Linux 开发者 Windows
Windows、Linux 和 Mac:操作系统之间的区别
Windows系统、Linux系统与Mac系统:操作系统的对比与选择 操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。以下是Windows 系统、Linux 系统、Mac 系统的对比:
|
8月前
|
编解码 安全 Linux
Linux vs windows 他们之间的区别
Linux vs windows 他们之间的区别
138 0
|
8月前
|
Ubuntu 安全 Unix
【新星计划Linux】——Linux介绍与了解Linux与Windows系统区别
【新星计划Linux】——Linux介绍与了解Linux与Windows系统区别
138 0
|
Windows
Windows系统的32位和64位系统区别
Windows系统的32位和64位系统区别
645 0
|
存储 Unix Linux
重学操作系统----13 Linux 内核和 Windows 内核有什么区别
重学操作系统----13 Linux 内核和 Windows 内核有什么区别
354 0

热门文章

最新文章