求救!在线等高手!

时间:2022-10-15 17:33:06
程序现在已经算出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%

10 个解决方案

#1


变得只是Y值的边界,还是说全变了?

#2


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

#3


你把0,100%这两个当做变量不就好了嘛?!

#4


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

现在这种字符串的条件可以用正则表达式解析

#5


估计有时变的是Y值的边界,有时是全变。

#6


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

#7



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;
  }



这样调用编译器可以直接把你取出的天骄字符串组合成函数 并执行  这样完全可以满足你的需求!

#8


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

#9


我引用不了CSharpCodeProvider这个类

#10


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

#1


变得只是Y值的边界,还是说全变了?

#2


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

#3


你把0,100%这两个当做变量不就好了嘛?!

#4


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

现在这种字符串的条件可以用正则表达式解析

#5


估计有时变的是Y值的边界,有时是全变。

#6


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

#7



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;
  }



这样调用编译器可以直接把你取出的天骄字符串组合成函数 并执行  这样完全可以满足你的需求!

#8


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

#9


我引用不了CSharpCodeProvider这个类

#10


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