快速业务通道

ASP.NET错误处理:Runtime Error

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-14
转换:

   1: int i = 3;
   2:  
   3: long l = i; // 静态转换 int->long
   4:  
   5: int i2 = (int) l; // 静态转换 long->int

我们可以通过使用OfType或者Cast将一个ints序列转换为longs序列来演示静态转换问题:

   1: int[] integers = { 1, 2, 3 };
   2:  
   3: IEnumerable<long> test1 =integers.OfType<long>();
   4:  
   5: IEnumerable<long> test2 =integers.Cast<long>();

枚举test1最终的到0个元素, 而枚举test2则得到一个异常, 上面提到的OfType和Cast的各自内部实现已经很清楚的解释了为什么会得到这样的结果. 不过就像我们之前建议的, 可以使用Select来实现静态类型转换的目的:

   1: IEnumerable<long> castLong = integers.Select (s => (long) s);

OfType和Cast对过滤一个泛型输入序列的向下类型元素是非常有用的. 例如如果你有一个输入序列类型是IEnumerable, OfType将只会返回apple类型的元素. 这一点尤其在LINQ to XML当中更加有用.

ToArray, ToList, ToDictionary, ToLookup

ToArray和ToList将一个结果集转成一个数组或者泛型列表. 这些操作符会使输入序列立即执行枚举操作(除非是在间接的子查询或者表达式树上)

ToDictionary和ToLookup接受如下的参数:

输入序列: IEnumerable

键选择器(key selector): TSource => TKey

元素选择器(可选): TSource => TElement

Comparer(可选): IEqualityComparer

ToDictionary同样也会引起一个立即执行将结果写入一个泛型Dictionary. keySelector表达式必须评估输入序列每个元素的唯一性, 否则将会得到一个异常. 相反, ToLookup允许多个元素拥有相同的键.

AsEnumerable与AsQueryable

AsEnumerable将一个序列向上转换为一个IEnumerable, 强制将Enumerable类下面的查询操作符绑定到后续的子查询当中.

AsQueryable将一个序列向下转换为一个IQueryable, 它生成了一个本地查询的IQueryable包装

待续!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号