举例:代码中有一段代码for()
{
if(a>=2&&b<=3)//条件
{
...
}
}如果能改成如下:
for()
{
if("a>=2&&b<=3")//条件
{
...
}
}如果能写成这样就能随意改变条件,就像sql的查询分析器请教有没有实现方法,谢谢

解决方案 »

  1.   

    如果我没理解错误的话:
    写一个方法  然后将"a>=2&&b <=3"作为参数传递进来  当然方法的参数应该Boolean类型的
      

  2.   

    嘿嘿, 我一般把皮球踢出去, 谁想分析那个字符串的逻辑谁分析,
    只要给我一个 delegate 实例就行:delegate bool p(string expression);
    void somefunction(p pinstance, ...)
    {
       //....
      for()
      {
        if(pinstance("a>=2&&b <=3"))//条件
        {
          ...
        }
      } 
      //.....
      

  3.   

    用正则表达式就好了 在2楼说的pinstance方法里面解析字符串
      

  4.   

    这个需要把字符串转成“可执行代码”,才可以计算。这是在网上找到的一段代码,楼主可以参考下:using Microsoft.CSharp;
    using System.CodeDom.Compiler;
    using System.Reflection;private void button1_Click(object sender, EventArgs e)
    {
        ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
        CompilerParameters vCompilerParameters = new CompilerParameters();
        vCompilerParameters.GenerateExecutable = false;
        vCompilerParameters.GenerateInMemory = true;
        string vSource = 
            "public class Temp\n" +
            "{\n" +
            "   public double Test(double A, double B)\n" +
            "   {\n" +
            "       return A / B;\n" +
            "   }\n" +
            "}\n";
        CompilerResults vCompilerResults =
            vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource); 
        Assembly vAssembly = vCompilerResults.CompiledAssembly;
        object vTemp = vAssembly.CreateInstance("Temp");
        MethodInfo vTest = vTemp.GetType().GetMethod("Test");
        for (int i = 1; i < 100; i++)
        {
            object[] vParams = { 1, i };
            object vDouble = vTest.Invoke(vTemp, vParams);
            textBox1.AppendText(vDouble.ToString() + "\r\n");
        }
    }