标签:style class blog code tar color
下面的方法都是IEnumerable<T>的扩展方法:
int[] values1 = { 3, 5, 9, 8, 20 }; int[] values2 = { 9, 13, 9, 8 }; var e1 = values1.Intersect(values2);//Intersect()输出values1与values2两个集合的交集元素 foreach (var i in e1) { Console.WriteLine(i); }//输出9 8
int[] values1 = { 3, 5, 9, 8, 20 }; int[] values2 = { 9, 13, 9, 8 }; int i = values1.ElementAt(3);//序号为3的元素,从0开始数 Console.WriteLine(i);//输出8
1 int[] values1 = { 3, 5, 9, 8, 20 }; 2 int[] values2 = { 9, 13, 9, 8 }; 3 4 int i = values1.First();//Last()最后一个 5 Console.WriteLine(i);//3
int[] values3 = {3}; int i = values3.Single(); //唯一一个,如果序列中有0个或者多于一个元素,否则报错 Console.WriteLine(i);//输出3
Linq只能用于范型的序列,IEnumerable<T>!!对于非范型,可以用Cast或者OfType IEnumerable的方法:
IEnumerable的方法:
Cast<TResult>:由于Linq要针对范型类型操作,对于老版本.Net类等非范型的IEnumerable序列可以用Cast方法转换为范型的序列。
ArrayList l;
IEnumerable<int> il = l.Cast<int>();
OfType<TResult>:Cast会尝试将序列中所有元素都转换为TResult类型,如果待转换的非范型序列中含有其他类型,则会报错。OfType则是只将序列中挑出指定类型的元素转换到范型序列中。
Linq的效率怎么样:(小数据量、对性能要求不高的环节用linq很方便,而且延迟加载机制降低了内存占用,比一般人写的程序效率都高)
1 DataTable dt = null; 2 //if (dt.Rows.Count != 1) 3 //{ 4 // throw new Exception("不止一条"); 5 //} 6 //DataRow row = dt.Rows[0]; 7 8 //改进之~ 9 //Cast用来将非泛型的的序列转换为泛型的序列 10 //dt.Rows是非泛型的序列通过Cast<DataRow>()转化成泛型的序列 11 //Single取得序列的唯一一个元素! 12 DataRow row = dt.Rows.Cast<DataRow>().Single();
object[] values = { 3, 5, 9, 8, 10 }; //Cast<int>()将object数组转化为泛型的数组 Console.WriteLine(values.Cast<int>().Max());//输出10
1 object[] values = { 3, 5, 9, 8, 10,"aa"}; 2 //Console.WriteLine(values.Cast<int>().Max());//会报错,不能转换成功 3 4 //将values数组中是int类型的元素转换成泛型数组,不是的元素排除在外 5 Console.WriteLine(values.OfType<int>().Max());//输出10
1 object[] values = { 3, 5, 9, 8, 10,"aa"}; 2 3 //OfType是挑出符合类型的进行转换 4 foreach (var i in values.OfType<string>()) 5 { 6 Console.WriteLine(i); 7 }//输出aa
标签:style class blog code tar color
原文地址:http://www.cnblogs.com/skyl/p/3788083.html