C#使用比较操作符(!=、<、>、<=、>=)的字符串构造Lambda表达式树,并生成委托执行
2014-02-17 21:34
585 查看
下面是一个把C#使用比较操作符的字符串作为参数来构造一个委托
比如我告诉一个方法,我现在要比较x,y两个值,但具体是大于,还是小于,还是其它,我用操作符的字符串来当成参数,比如传递一个">"字符串给函数,我是要比较x是否大于y,然后返回一个bool型的结果
实现代码如下:
比如我告诉一个方法,我现在要比较x,y两个值,但具体是大于,还是小于,还是其它,我用操作符的字符串来当成参数,比如传递一个">"字符串给函数,我是要比较x是否大于y,然后返回一个bool型的结果
实现代码如下:
using System; using System.Linq.Expressions; class DynamicPredicate { public static Expression<Func<T, T, bool>> Generate<T>(string op) { ParameterExpression x = Expression.Parameter(typeof(T), "x"); ParameterExpression y = Expression.Parameter(typeof(T), "y"); return Expression.Lambda<Func<T, T, bool>> ( (op.Equals(">")) ? Expression.GreaterThan(x, y) : (op.Equals("<")) ? Expression.LessThan(x, y) : (op.Equals(">=")) ? Expression.GreaterThanOrEqual(x, y) : (op.Equals("<=")) ? Expression.LessThanOrEqual(x, y) : (op.Equals("!=")) ? Expression.NotEqual(x, y) : Expression.Equal(x, y), x, y ); } } static void Main() { string op = ">="; var integerPredicate = DynamicPredicate.Generate<int>(op).Compile(); var floatPredicate = DynamicPredicate.Generate<float>(op).Compile(); int iA = 12, iB = 4; Console.WriteLine("{0} {1} {2} : {3}", iA, op, iB, integerPredicate(iA, iB)); float fA = 867.0f, fB = 867.0f; Console.WriteLine("{0} {1} {2} : {3}", fA, op, fB, floatPredicate(fA, fB)); Console.WriteLine("{0} {1} {2} : {3}", fA, ">", fB, DynamicPredicate.Generate<float>(">").Compile()(fA, fB)); }
相关文章推荐
- 在字符串中使用特殊字符<>"'&空格
- 在C#.NET中,关于<%%>使用方法
- C#中Stack<T>类的使用及部分成员函数的源码分析
- if判断与比较操作符gt、lt、eq等的使用
- C#基础学习日志===&amp;amp;amp;amp;gt;命名空间的使用&amp;amp;amp;amp;lt;===
- C#操作字符串方法总结<转>
- C#中Queue<T>类的使用以及部分方法的源码分析
- 编写一个程序,将两个字符串s1和s2比较,如果s1 > s2,输出一个正数;s1 = s2,输出0,;s1 < s2输出一个负数。不要使用strcmp函数。
- 记住:不要使用!=,~=,^=,<>,=与NULL做比较
- C#中的匿名函数使用,类名<T>
- [C#]泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,List<T>,Dictionary<Tkey,Tvalue>,SortedList<Tkey,Tvalue>,
- [C#基础教程]C#泛型集合—Dictionary<K,V>使用技巧
- 使用request生成一个枚举类获取所有的<input>的内容
- C# List<T>使用方式
- <Unity UGUI>使用c#反射实现UGUI文本显示的国际化
- <转载>字符串 全排列生成问题
- xjh struts标签版本比较老的,<s:iterator >没有var属性的嵌套循环 使用<s:property value='#id.xxx'>
- C#中使用List<struct>的问题
- 【.Net码农】C# List<string>与String字符串相互转换
- shell 字符串比较大小时,需要将 <> 进行转义 \< \>