程序现在已经算出Y、Z的值,下来要算g的值。
用户要求:
如果算出的Y<0,然后g=60%;
如果0≤Y≤100%,然后g=Y/Z;
如果Y>0,根据g=Y/Z算出的g≤100%,则g=90%
如果用户不改变要求就好办了,直接把上面的条件写到程序里。
但现在问题是用户可能某天会改变要求,也就是条件,比如:如果0≤Y≤90%,然后g=Y/Z。但是公式始终不变。像这种情况该怎么办?
已经把用户的要求保存到数据库里了。如:
条件                 公式
Y<0                  g=60%
0≤Y≤100%           g=Y/Z
Y>0 && g≤100%       g=90%

解决方案 »

  1.   

    建议写在XML文档中 所有变化的条件在调用
      

  2.   

    你从数据库里取出来用户的条件,然后解析这些条件,你的这些条件可以用XML保存,这样更规范一些,然后把解析出来的 不管是90% 还是100% ,作为一个变量在程序中使用现在这种字符串的条件可以用正则表达式解析
      

  3.   

    调用c#的编译器  直接把你的条件 如0≤Y≤100编译成C#的语句 直接执行!
      

  4.   


    using System.CodeDom.Compiler;
    using Microsoft.CSharp;  private static object Eval( string cCharpCode )
      {
       CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider( );
       ICodeCompiler compiler = csharpCodeProvider.CreateCompiler( );
       CompilerParameters cp = new CompilerParameters( );
       cp.ReferencedAssemblies.Add("system.dll" );
       cp.CompilerOptions = "/t:library";
       cp.GenerateInMemory = true;
       string myCode = 
                "using System;"+            "namespace CoustomEval"+
                "{"+
                    "class myLib"+
                    "{ "+
                        "private object expr = ("+cCharpCode+");"+
                        "public object myMethod()"+
                        "{"+   
                            "return expr;"+
                        "}"+
                    "}"+
                "}";   CompilerResults cr = compiler.CompileAssemblyFromSource( cp,myCode);
       Assembly assembly = cr.CompiledAssembly;
       object tmp = assembly.CreateInstance( "CoustomEval.myLib" );
       Type type = tmp.GetType();
       MethodInfo mi = type.GetMethod( "myMethod" );
       object result = mi.Invoke( tmp,null );
       return result;
      }这样调用编译器可以直接把你取出的天骄字符串组合成函数 并执行  这样完全可以满足你的需求!
      

  5.   

    我用的是.net1,应该从哪添加Microsoft.CSharp?
      

  6.   

    我引用不了CSharpCodeProvider这个类
      

  7.   

    用的开发工具出问题了。可以引用CSharpCodeProvider类。
    问题解决了!