public static class expressionhelp { /// <summary> /// lambda表达式拼接 /// </summary> /// <typeparam name="t"></typeparam> /// <param name="first"></param> /// <param name="second"></param> /// <param name="merge"></param> /// <returns></returns> public static expression<t> compose<t>(this expression<t> first, expression<t> second, func<expression, expression, expression> merge) { var map = first.parameters.select((f, i) => new { f, s = second.parameters[i] }).todictionary(p => p.s, p => p.f); var secondbody = parameterrebinder.replaceparameters(map, second.body); return expression.lambda<t>(merge(first.body, secondbody), first.parameters); } /// <summary> /// and扩展 /// </summary> /// <typeparam name="t"></typeparam> /// <param name="first"></param> /// <param name="second"></param> /// <returns></returns> public static expression<func<t1, t2, bool>> and<t1, t2>(this expression<func<t1, t2, bool>> first, expression<func<t1, t2, bool>> second) { return first.compose(second, expression.and); } public static expression<func<t, bool>> and<t>(this expression<func<t, bool>> first, expression<func<t, bool>> second) { return first.compose(second, expression.and); } /// <summary> /// or扩展 /// </summary> /// <typeparam name="t"></typeparam> /// <param name="first"></param> /// <param name="second"></param> /// <returns></returns> public static expression<func<t1, t2, bool>> or<t1, t2>(this expression<func<t1, t2, bool>> first, expression<func<t1, t2, bool>> second) { return first.compose(second, expression.or); } public static expression<func<t, bool>> or<t>(this expression<func<t, bool>> first, expression<func<t, bool>> second) { return first.compose(second, expression.or); } }
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
网友评论