首页 新闻 搜索 专区 学院

关于一个泛型方法的疑惑

0
悬赏园豆:20 [已解决问题] 解决于 2016-08-29 13:30

这是一个分页的泛型方法签名:

IQueryable<T> GetModelsByPage<type>(int pageSize, int pageIndex, bool isAsc, Expression<Func<T, type>> OrderByLambda, Expression<Func<T, bool>> WhereLambda);

我UI层调用的时候

按道理来讲 应该是

GetModelsByPage<int>(....................);
为什么我这样写也是正确的?
StaffService.GetModelsByPage(1, 1, true,p=>p.Id, p => p.Age == 1);
KotobukiTsumugi的主页 KotobukiTsumugi | 初学一级 | 园豆:23
提问于:2016-08-29 10:16
< >
分享
最佳答案
0

最简单方式,你把GetModelsByPage<int>(....................); 这种写法放进vs2015,它会提示你<int>是多余的。

 

vs有能力根据你后面的参数类型推断出泛型方法的泛型参数类型,包括返回值。

IQueryable<T> GetModelsByPage<type>(int pageSize, int pageIndex, bool isAsc, Expression<Func<T, type>> OrderByLambda, Expression<Func<T, bool>> WhereLambda);

StaffService.GetModelsByPage(1, 1, true,p=>p.Id, p => p.Age == 1);

红色的参数能推导出T的类型,所以vs知道这个方法返回什么样类型集合IQueryable<T>

你的排序第二个参数(浅红色)类型是type型,是p.id,所以vs推断泛型参数为int类型。

可以推知排序可以根据bool型,string型等等进行排序,因为毕竟是泛型并且这里没有泛型约束,可以接受任何类型参数,

 

 

收获园豆:20
在日码农 | 菜鸟二级 |园豆:292 | 2016-08-29 13:26
其他回答(2)
0

这个是不是还有一个StaffService:这个泛型类<Staff>这样???

顾晓北 | 园豆:10819 (专家六级) | 2016-08-29 10:44

是的 

支持(0) 反对(0) KotobukiTsumugi | 园豆:23 (初学一级) | 2016-08-29 10:49

查了下msdn好像是编译器自己推断的。

支持(0) 反对(0) KotobukiTsumugi | 园豆:23 (初学一级) | 2016-08-29 10:49

@扶着往事走: 那不就是了吗?staffservice事实上就是一个泛型类,额,这么说也不太准确,他的T已经有了具体值,也不算泛型类了。。。

支持(0) 反对(0) 顾晓北 | 园豆:10819 (专家六级) | 2016-08-29 10:52
0

 

通过Expression<Func<T, type>> OrderByLambda这里的type可以推导出前面的type。

p=>p.Id 这里ID是int ,前面就是int

 

长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-08-29 10:51

嗯,如果是无参的 编译器也就无法推断了,所以无参的必须要指定类型 

支持(0) 反对(0) KotobukiTsumugi | 园豆:23 (初学一级) | 2016-08-29 10:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册