可以对所有实现了IEnumerable<T>接口的对象执行标准的LINQ查询
<3>泛型约束
很多时候我们不希望使用者太过自由
我们希望他们在使用我们设计的泛型类型时
不要很随意的传入任何类型
对于泛型类型的设计者来说,要求使用者传入指定的类型是很有必要的
因为我们只有知道他传入了什么东西,才方便对这个东西做操作
让我们来给上面设计的泛型类型加一个泛型约束
代码如下:
public static class SomethingFactory<T> where T:MyObj
这样在使用SomethingFactory的时候就只能传入MyObj类型或MyObj的派生类型啦
注意:
还可以写成这样
where T:MyObj,new()
来约束传入的类型必须有一个构造函数。
(3)泛型的好处
<1>算法的重用
想想看:list类型的排序算法,对所有类型的list集合都是有用的
<2>类型安全
<3>提升性能
没有类型转化了,一方面保证类型安全,另一方面保证性能提升
<4>可读性更好
这一点就不解释了
//linq语句必须是以from开头,以select 或者 group结尾巴
var query = from r
in
lists where r.age >= 20 && r.age <= 30 select r;
foreach
( Person per
in
query )
{
Console.WriteLine( per.name +
" "
+ per.age ) ;
}
var results = from w in words
where w.Contains(“z”)
select w;
LINQ 和 Lambda 等价
int[] scores = { 10, 90, 100, 30, 70, 29, 45 };
var result = from i in scores//LINQ表达式
where i>10
select i;
foreach (var e in result)
{
Debug.WriteLine(e);
}
var result1 = scores.Select(e => e).Where(o=>o>10);//Lambda表达式
Debug.WriteLine("==================================================================");
foreach (var e in result1)
{
Debug.WriteLine(e);
}