如何实现这个类似eval的功能????

zt117 2015-04-04 08:55:24
有这样一个功能,请教高手如何实现:

我建了一个判断准则,如下所示:
红色:a>3 | b<2 | c>=1
蓝色:a<3 | b>8 | c>=5 | d<4

表示的意思是:
if a>3 and b<2 and c>=1 then msgbox("红色")
if a<3 and b>8 and c>=5 and d<4 then msgbox("红色")

现在的问题是,我想建立一个函数,传递过来a、b、c、d就能判断出红色还是蓝色
但其中的难点是判断准则不是固定的,有可能当前是if a>3 and b<2 and c>=1 then msgbox("红色")
换一个应用场合,其判断准则就是if a>2.5 and b<4 and c>=1 and d<4 then msgbox("红色")

因此我希望根据不同判断准则,实现类似这样的功能
if eval(判断准则) then msgbox(颜色)

请高手赐教。
...全文
179 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-04-05
  • 打赏
  • 举报
回复
C# 提供有 Lambda 表达式,为什么不用一下?
本拉灯 2015-04-04
  • 打赏
  • 举报
回复
你要的是这个 http://ncalc.codeplex.com/releases/view/73656 var expressions = new[] { "2 * (3 + 5)", "2 * (2*(2*(2+1)))", "10 % 3", "false || not (false and true)", "3 > 2 and 1 <= (3-2)", "3 % 2 != 10 % 3", "if( [age] >= 18, 'majeur', 'mineur')", "CalculateBenefits([user]) * [Taxes]" }; foreach (string expression in expressions) Console.WriteLine("{0} = {1}", expression, new Expression(expression).Evaluate());
  • 打赏
  • 举报
回复
这个不一定用eval,也可以考虑通过数据库实现,把a,b,c,d的临界值(如上面的2.5, 4, 1,4等)存到数据库里,使用时把a,b,c,d的值传过去比较
  • 打赏
  • 举报
回复
你去查下微软企业库的验证模块,下个源码,里面有你希望的and,or甚至比这更复杂的 其实简单的就是传递Func<bool> func的集合,只是因为需要判断And,Or还有括号之类的,就变得复杂了 下面是源码地址 http://www.microsoft.com/en-us/download/details.aspx?id=38789

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧