通常我们在调用一个方法时我们可以传递不同类型的参数,比如int、string、list集合等,但是我们观察C#里的一些方法就会发现比如linq里面的Where,里面的参数是以Lambda表达式来传入的,那么我们自定义的方法如何也借用这种方式去实现呢?如下:
OrderCountModel GetSqlListCountForMob<T>(string userId, List<Expression<Func<T_O_Conv_HeaderModel, bool>>> expWhereList, Expression<Func<T_O_Conv_HeaderModel, T>> expOrder);
我们定义了一个名为GetSqlListCountForMob的方法,返回一个OrderCountModel,改方法的输出参数依次是userid、Lambda表达式、Lambda表达式,其中Lambda表达式内部使用对象是T_O_Conv_HeaderModel类型,第一个表达式第二个参数返回bool类型,第二个表达式第二个参数返回泛型T。
我们再来看看调用:
外层调用时使用表达式参数即可,如p=>p.OrderStates==1。这里我外层包了list存了多个lambda,原理是同样的,底层会遍历集合。
顺带说一下泛型T,存在我们使用表达式时不确定表达式里返回的实际类型, 因此我们在定义时可以用泛型T指定,细看第二个表达式的定义,结构是:
方法名<T>(Expression<Func<T_O_Conv_HeaderModel, T>)
如此便可完成很多公共方法的设计,很实用,尤其是对泛型T的运用。
以上,小计一下,方便后续查阅。
PS:楼主邮箱 tccwpl@163.com