Shouldn't this work:

using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;

class Class1
{
  static void Main(string[] args)
  {
    string eval = "(10 + 3) * 5";
    Console.WriteLine("Evaluated: {0}", Evaluator(eval));
  }

  static int Evaluator(string eval)
  {
    ICodeCompiler comp = (new CSharpCodeProvider().CreateCompiler());
    CompilerParameters cp = new CompilerParameters();
    cp.ReferencedAssemblies.Add("system.dll");
    cp.GenerateExecutable = false;
    cp.GenerateInMemory = true;

    string code = "using System; ";
    code += "namespace MyTest { ";
    code += "  public class Evaluator { ";
    code += "    public int GetInt() { ";
    code += "      return (" + eval + "); ";
    code += "} } }";

    CompilerResults cr = comp.CompileAssemblyFromSource(cp, code);
    Assembly a = cr.CompiledAssembly;
    Object o = a.CreateInstance("MyTest.Evaluator");
    Type type =  o.GetType();
    MethodInfo mi = type.GetMethod("GetInt");
    return (int) mi.Invoke(o, null);
  }
}


Thanks,

Shawn Wildermuth
[EMAIL PROTECTED]

> -----Original Message-----
> From: dotnet discussion [mailto:[EMAIL PROTECTED]]
> On Behalf Of Shawn Wildermuth
> Sent: Monday, April 15, 2002 8:58 AM
> To: [EMAIL PROTECTED]
> Subject: Re: [DOTNET] Evaluate math expression strings?
>
>
> Can't you use the CodeDOM to do this?  Wrap the whole thing
> in a class (in the CodeDOM) and evaluate it.  No?
>
> Thanks,
>
> Shawn Wildermuth
> [EMAIL PROTECTED]
>
> > -----Original Message-----
> > From: dotnet discussion [mailto:[EMAIL PROTECTED]]
> > On Behalf Of Stephens
> > Sent: Monday, April 15, 2002 8:36 AM
> > To: [EMAIL PROTECTED]
> > Subject: [DOTNET] Evaluate math expression strings?
> >
> >
> > > Does the framework have (or is someone willing to share :)
> > ) a utility
> > > class to do this? Or will I need to build my own interpreter?
> > > Something like...
> > >
> > > int result = MyMath.Evaluate( "(10 / 2) * 3" );
> >
> > There's some VB 6 code that evaluates simple expressions at:
> >
>     http://www.vb-helper.com/HowTo/expr.zip
>
> You can read messages from the DOTNET archive, unsubscribe
> from DOTNET, or subscribe to other DevelopMentor lists at
> http://discuss.develop.com.
>
> You can read messages from the
> DOTNET archive, unsubscribe from DOTNET, or subscribe to
> other DevelopMentor lists at http://discuss.develop.com.
>

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to