Linq学习之旅——Linq to Objects之立即执行方法(下篇)
2012-08-11 21:20 xiashengwang 阅读(555) 评论(0) 编辑 收藏 举报1,ElementAt 方法
获取序列中指定索引的元素,如果索引超过范围将引发异常。
private void ElementAtDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; var name = names.ElementAt(1); Console.WriteLine("index of 1 is:{0}", name); try { var name2 = names.ElementAt(10);//index超界了,异常 } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } // index of 1 is:李莫愁 //在 System.ArgumentOutOfRangeException 中第一次偶然出现的“mscorlib.dll”类型的异常 //索引超出范围。必须为非负值并小于集合大小。 //参数名: index }
2,ElementAtOrDefault 方法
获取序列中指定索引的元素。如果索引超过范围,将返回数组元素的默认值。
private void ElementAtOrDefalutDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; var name = names.ElementAtOrDefault(1); Console.WriteLine("index of 1 is:{0}", name);//李莫愁 try { var name2 = names.ElementAtOrDefault(10);//没有异常,返回string类型的默认值null Console.WriteLine("index of 10 is:{0}", name2);//name2=null } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } }
3,All 方法
序列中的全部元素都满足条件,返回true。否则为false。
private void AllDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; var b = names.All(s => s.Length >= 2);//所有人的名字都大于等于2个字吗? Console.WriteLine(b);//true b = names.All(s => s.Length >= 3);//所有人的名字都大于等于3个字吗? Console.WriteLine(b);//false }
4,Any 方法
检查序列中的元素是否存在或满足条件。
很显然,只要有一个满足条件,它都是true。一个都没有满足条件的为false。
private void AnyDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; string[] emptys = { }; var b1 = names.Any(); var b2 = emptys.Any(); var b3 = names.Any(s => s.IndexOf("李") > -1); Console.WriteLine("b1={0}", b1);//true Console.WriteLine("b2={0}", b2);//false Console.WriteLine("b3={0}", b3);//true }
5,Contains 方法
确定元素是否在序列中。
private void ContainsDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; var b1 = names.Contains("黄蓉"); Console.WriteLine("b1={0}", b1);//true //注意:如果传入自定义的IEqualityComparer,可以改变相等性的判定 }
6,Count 方法
获取序列元素的个数,或指定条件的元素的个数。
返回的类型是int32.
private void CountDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; var cnt = names.Count(); var cnt2 = names.Count(s => s.IndexOf("黄") > -1); Console.WriteLine("返回个数的类型是:{0},超过Int.MaxValue将会溢出报错", cnt.GetType().FullName); Console.WriteLine("cnt={0}", cnt);//5 Console.WriteLine("cnt2={0}", cnt2);//2 //返回个数的类型是:System.Int32,超过Int.MaxValue将会溢出报错 //cnt=5 //cnt2=2 }
7,LongCount 方法
获取序列元素的个数,或指定条件的元素的个数。
返回的类型是int64.
private void LongCountDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; var cnt = names.LongCount(); var cnt2 = names.LongCount(s => s.IndexOf("黄") > -1); Console.WriteLine("返回个数的类型是:{0},超过Int64.MaxValue将会溢出报错", cnt.GetType().FullName); Console.WriteLine("cnt={0}", cnt);//5 Console.WriteLine("cnt2={0}", cnt2);//2 //返回个数的类型是:System.Int64,超过Int64.MaxValue将会溢出报错 //cnt=5 //cnt2=2 }
8,Aggregate 方法
Aggregate用于将序列的元素进行累加。这里的累加和Sum有所不同,它能实现Sum的功能,也能实现字符串的累加等自定义操作。
它的英文是聚合的意思。
private void AggregateDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; var concat = names.Aggregate((a, b) => string.Format("{0},{1}", a, b)); Console.WriteLine(concat); //输出: //郭靖,李莫愁,欧阳晓晓,黄蓉,黄药师 }
9,Sum 方法
计算数字序列的和。如果元素不是数字类型,可以利用转换函数,转换成数字类型在求和。
private void SumDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; int[] lst1 = { 10, 20, 30 }; int?[] lst2 = { 10, null, 30 }; int i1 = lst1.Sum(); int? i2 = lst2.Sum(); var concat = names.Sum(s => s.Length); Console.WriteLine(i1);//60 Console.WriteLine(i2);//40 Console.WriteLine(concat);//14 }
10,Average 方法
对数字类型的序列求平均值。
private void AverageDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };//随意类型 int[] lst1 = { 10, 20, 30 };//普通数字类型 int?[] lst2 = { 10, null, 30 };//可空数字类型 double i1 = lst1.Average(); double? i2 = lst2.Average(); var concat = names.Average(s => s.Length); Console.WriteLine(i1);//20 Console.WriteLine(i2);//20 null的那个元素没计算到总个数中 Console.WriteLine(concat);//2.8 }
11,Min 方法
返回序列中得最小值。
如果元素是非数字的,只要实现了IComparabe<T>接口,就可以找出最小的值。
private void MinDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };//随意类型 int[] lst1 = { 10, 20, 30 };//普通数字类型 int?[] lst2 = { 10, null, 30 };//可空数字类型 double i1 = lst1.Min(); double? i2 = lst2.Min(); var concat = names.Min(); Console.WriteLine(i1);//10 Console.WriteLine(i2);//10 注意:null并不是最小值哦! Console.WriteLine(concat);//郭靖 }
12,Max 方法
返回序列中得最大值。
如果元素是非数字的,只要实现了IComparabe<T>接口,就可以找出最大的值。
private void MaxDemo() { string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };//随意类型 int[] lst1 = { 10, 20, 30 };//普通数字类型 int?[] lst2 = { 10, null, 30 };//可空数字类型 double i1 = lst1.Max(); double? i2 = lst2.Max(); var concat = names.Max(); Console.WriteLine(i1);//30 Console.WriteLine(i2);//30 Console.WriteLine(concat);//欧阳晓晓 }