比如 "500<400|200>4000&5000<=100|!1"就要演化成 以下 这种
if (500<400|200>4000&5000<=100|!1)
需要可能有 () ,优先级,最内的 () 优先级最高 !!因为是字符串 ,所以需要 判断
javascript 中 有eval
在net 中如何 作 ??
表达能力不行 .不知道 大家看的懂吗?
if (500<400|200>4000&5000<=100|!1)
需要可能有 () ,优先级,最内的 () 优先级最高 !!因为是字符串 ,所以需要 判断
javascript 中 有eval
在net 中如何 作 ??
表达能力不行 .不知道 大家看的懂吗?
解决方案 »
- asp.net中的ashx页无法读取上传的文件
- 网页中的视频播放器在ie7能播放,在ie6里面不能播放
- 传说中的asp.net技术内幕
- asp.net 如何将AVI或者MPEG 格式转化成FLASH 在网页中播放?
- 写xml文件
- 高分请教各位高手:在asp.net下如何在后台代码实现将一段html代码写入到页面的指定位置?
- 求救!!如何在IE(客户端)里实现编辑图片!!!实在没辙了!!!!诚心求教!!!!
- 一个帐号只能在一台特定的机器上使用,在其它的机器上不能使用这个帐号登录网站,请问怎样做比较好?
- 请问这个种网址是什么意思?哪位高手能解答一下
- dataGrid更新事件UpdateCommand()
- 急!如何取得当前类的名称!!!
- +++在线等今天结帖+++如何给上传文件框赋值=======
但是暂时不需要那么复杂
只需要简单 几个符号
() 有限级
! 逻辑非运算符
& 逻辑与
| 逻辑或
>= ,> ,== < ,<=
这些符号 而已 !!
\((?>[^()]+|\((?<Depth>)|\)(?<-Depth>))*(?(Depth)(?!))\)提取的括号里面可以包括括号,你可以作一个循环提取,至于怎么演化为
if (500<400|200>4000&5000<=100|!1)
这种形式,这是指一般的字符串还是脚本??有点不明白???^_^
上面是 数据库中的一个字符串 !! 条件配置字符串 !!
通过一些列算法 演化为 "500<400|200>4000&5000<=100|!1" 这个字符串 因为是条件 所以必须计算出 数值为 真或者假 !!
但是总不能用 字符串拿来判断 !
所以需要一个算法 成为代码中可执行的 判断语句
if (500<400|200>4000&5000<=100|!1)
应该比较情绪了
如果这样的话,用数据结构中介绍的四则运算的方法就足够了!如果if (500<400|200>4000&5000<=100|!1)需要使用的,直接用 if(true)或者if(false)代替就可以了!
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
using System.Text;
/// <summary>
/// Eval 的摘要说明。
/// </summary>
public class Eval
{
public static object Calc(string expression)
{
string className = "Calc";
string methodName = "Run";
expression=expression.Replace("/","*1.0/");
// 创建编译器实例。
ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler());
// 设置编译参数。
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true;
// 创建动态代码。
StringBuilder classSource = new StringBuilder();
classSource.Append("public class "+ className +"\n");
classSource.Append("{\n");
classSource.Append(" public object " + methodName + "()\n");
classSource.Append(" {\n");
classSource.Append(" return "+ expression + ";\n");
classSource.Append(" }\n");
classSource.Append("}");
//System.Diagnostics.Debug.WriteLine(classSource.ToString());
// 编译代码。
CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());
// 获取编译后的程序集。
Assembly assembly = result.CompiledAssembly;
// 动态调用方法。
object eval = assembly.CreateInstance(className);
MethodInfo method = eval.GetType().GetMethod(methodName);
object reobj = method.Invoke(eval, null);
GC.Collect();
return reobj; }
}