Click here to Skip to main content
Click here to Skip to main content

C# Eval Function

, 21 Jun 2007 CPOL
Rate this:
Please Sign up or sign in to vote.
C# eval function


This article is about a C# eval function, how to parse an expression and evaluate it. It supports Boolean, Bitwise, Arithmetic, Unary, Paren, Member (such as, Indexer (such as array[index]) and ConditionalIf(?:), it also supports Variable assign.

You can use it to evaluate one statement in the C# source code.

It does not use runtime compiler.

It does not use JScript.NET.

It does not use DataTable.

Using the Code

Expression Example



All functions or properties use Reflection to eval. It has no global function and its syntax is checked at runtime.
If you let Parameter 'string'=typeof(string), then it can do like this:


If a parameter is a type, it will call its static function or property.





Sample Use

using System;
using Jyc.Expr;
namespace TestExpr
    class Program
        static void Main(string[] args)
            Parser ep = new Parser();
            Evaluater evaluater = new Evaluater();
            ParameterVariableHolder pvh = new ParameterVariableHolder();

            pvh.Parameters["char"] = new Parameter(typeof(char));
            pvh.Parameters["sbyte"] = new Parameter(typeof(sbyte));
            pvh.Parameters["byte"] = new Parameter(typeof(byte));
            pvh.Parameters["short"] = new Parameter(typeof(short));
            pvh.Parameters["ushort"] = new Parameter(typeof(ushort));
            pvh.Parameters["int"] = new Parameter(typeof(int));
            pvh.Parameters["uint"] = new Parameter(typeof(uint));
            pvh.Parameters["long"] = new Parameter(typeof(string));
            pvh.Parameters["ulong"] = new Parameter(typeof(ulong));
            pvh.Parameters["float"] = new Parameter(typeof(float));
            pvh.Parameters["double"] = new Parameter(typeof(double));
            pvh.Parameters["decimal"] = new Parameter(typeof(decimal));
            pvh.Parameters["DateTime"] = new Parameter(typeof(DateTime));
            pvh.Parameters["string"] = new Parameter(typeof(string));

            pvh.Parameters["Guid"] = new Parameter(typeof(Guid));

            pvh.Parameters["Convert"] = new Parameter(typeof(Convert));
            pvh.Parameters["Math"] = new Parameter(typeof(Math));
            pvh.Parameters["Array "] = new Parameter(typeof(Array));
            pvh.Parameters["Random"] = new Parameter(typeof(Random));
            pvh.Parameters["TimeZone"] = new Parameter(typeof(TimeZone));
            pvh.Parameters["AppDomain "] = new Parameter(typeof(AppDomain));

            pvh.Parameters["Console"] = new Parameter(typeof(Console));

            pvh.Parameters["evaluater"] = new Parameter(evaluater);

            evaluater.VariableHolder = pvh;

            while (true)
                System.Console.WriteLine("Input line,press Return to Eval:");
                string line = System.Console.ReadLine().Trim();
                if (string.IsNullOrEmpty(line))
                    Tree tree = ep.Parse(line);


                    object result = evaluater.Eval(tree);

                    if( result != null )
                        System.Console.WriteLine("Result:{0}", result);
                        System.Console.WriteLine("Result is null");
                catch (Exception e)
                    System.Console.WriteLine("Exception:" + e.GetType().Name _
                                               +"->"+ e.Message);


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Web Developer
China China
No Biography provided

Comments and Discussions

QuestionBug in Scanner.cs, at line 453 PinmemberMember 864646714-Feb-12 7:42 
QuestionThanks Pinmemberbildik9-Aug-11 10:58 
GeneralMy vote of 5 PinmemberChenNoam4-Oct-10 21:17 
GeneralGracias! PinmemberMember 44952424-Jun-10 6:00 
Generalthanks! Pinmemberbpbrainiak4-May-10 4:00 
GeneralRounding problem PinmemberPauline Cole30-Nov-09 11:20 
GeneralCalculation bug with negative numbers PinmemberPauline Cole11-Oct-09 23:51 
GeneralRe: Calculation bug with negative numbers Pinmemberbpbrainiak4-May-10 3:56 
GeneralNice PinmemberKeitaroSan8-Oct-09 7:17 
GeneralDon't use it for work, only for learning stuff PinmemberDannie Juge30-Sep-09 3:25 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.141029.1 | Last Updated 21 Jun 2007
Article Copyright 2006 by devilplusplus
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid