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

Evaluate C# Code (Eval Function)

, 12 Oct 2005
Rate this:
Please Sign up or sign in to vote.
An example that provides an Eval function for compiling/evaluating C# code at runtime.

Sample Image - EvalCSCode.jpg


This example shows an "Eval" function for C# and implements different usages of this evaluate function. The library is written in C# and can be tested with the MainForm in the solution.

Source view

Here you will see all the trick. The code generates a class structure with a basic "function prototype" in which the code to evaluate is filled in. The execution of the function should execute your code:

// Eval > Evaluates C# sourcelanguage
public static object Eval(string sCSCode) {

  CSharpCodeProvider c = new CSharpCodeProvider();
  ICodeCompiler icc = c.CreateCompiler();
  CompilerParameters cp = new CompilerParameters();


  cp.CompilerOptions = "/t:library";
  cp.GenerateInMemory = true;

  StringBuilder sb = new StringBuilder("");
  sb.Append("using System;\n" );
  sb.Append("using System.Xml;\n");
  sb.Append("using System.Data;\n");
  sb.Append("using System.Data.SqlClient;\n");
  sb.Append("using System.Windows.Forms;\n");
  sb.Append("using System.Drawing;\n");

  sb.Append("namespace CSCodeEvaler{ \n");
  sb.Append("public class CSCodeEvaler{ \n");
  sb.Append("public object EvalCode(){\n");
  sb.Append("return "+sCSCode+"; \n");
  sb.Append("} \n");
  sb.Append("} \n");

  CompilerResults cr = icc.CompileAssemblyFromSource(cp, sb.ToString());
  if( cr.Errors.Count > 0 ){
      MessageBox.Show("ERROR: " + cr.Errors[0].ErrorText, 
         "Error evaluating cs code", MessageBoxButtons.OK, 
         MessageBoxIcon.Error );
      return null;

  System.Reflection.Assembly a = cr.CompiledAssembly;
  object o = a.CreateInstance("CSCodeEvaler.CSCodeEvaler");

  Type t = o.GetType();
  MethodInfo mi = t.GetMethod("EvalCode");

  object s = mi.Invoke(o, null);
  return s;


Thanks fly out to:


  • Kim Hauser (dave) - Application Developer & System Engineer.


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


About the Author

Software Developer (Senior)
Switzerland Switzerland
programmer and software junkie since 1991 zurich switzerland
Follow on   Twitter   Google+

Comments and Discussions

QuestionGood work PinmemberSm.Abdullah6-Oct-12 20:13 
QuestionHow do you replace a string at a given position with it's working code representative? PinmemberLarissa Schön17-Mar-12 0:47 
GeneralAwesome, though quick question Pinmembermbainrot10-Apr-09 21:03 
QuestionEvalToObject Question Pinmembergravelkm14-Nov-08 2:43 
Questioncan a web project use "ReferencedAssemblies.Add("customer.dll")" Pinmemberwlbkeats7-Dec-06 23:34 
AnswerRe: can a web project use "ReferencedAssemblies.Add("customer.dll")" Pinmemberlzuxiaolong27-Nov-12 15:13 
GeneralUses of Eval PinmemberAnup Shinde29-Sep-06 16:06 
GeneralTotal waste of time... Pinmembermarkman@shaw.ca3-Mar-06 12:08 
GeneralRe: Total waste of time... PinmemberPascal Ganaye20-Mar-06 9:12 
GeneralRe: Total waste of time... Pinmembermarkman@shaw.ca21-Mar-06 5:54 
After a little research, JScriptEval can still be used. The code below accomplishes this.
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.JScript;
namespace Expressions
      public class JScriptEvaluator
            public static int EvalToInteger(string statement)
                  string s = EvalToString(statement);
                  return int.Parse(s.ToString());
            public static double EvalToDouble(string statement)
                  string s = EvalToString(statement);
                  return double.Parse(s);
            public static string EvalToString(string statement)
                  object o = EvalToObject(statement);
                  return o.ToString();
            public static object EvalToObject(string statement)
                  return _evaluatorType.InvokeMember(
                                    new object[] { statement }
            static JScriptEvaluator()
                  CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider();
                  CompilerParameters parameters;
                  parameters = new CompilerParameters();
                  parameters.GenerateInMemory = true;
                  CompilerResults results;
                  results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
                  Assembly assembly = results.CompiledAssembly;
                  _evaluatorType = assembly.GetType("Evaluator.Evaluator");
                  _evaluator = Activator.CreateInstance(_evaluatorType);
            private static object _evaluator = null;
            private static Type _evaluatorType = null;
            private static readonly string _jscriptSource =
                  @"package Evaluator
                     class Evaluator
                           public function Eval(expr : String) : String
                              return eval(expr);
GeneralRe: Total waste of time... PinmemberGraham Harrison11-Jan-07 23:34 
GeneralAn Eval Function for C# using JScript.NET (JavaScript) PinmemberMichael Freidgeim5-Jan-11 0:48 
GeneralRe: Total waste of time... Pinmemberkim.hauser8-Feb-07 2:37 
GeneralRe: Total waste of time... Pinmembermarketware30-Aug-07 11:25 
GeneralRe: Total waste of time... Pinmembermarketware31-Aug-07 11:08 
GeneralI dont think Total waste of time.. PinmemberMidax27-Apr-10 9:40 
QuestionUses PinmemberEvilToilet23-Oct-05 9:15 
AnswerRe: Uses Pinmemberkim.hauser2-Nov-05 11:03 
GeneralThanks for review... Pinmemberkim.hauser21-Oct-05 10:13 
QuestionUsing a static method instead Pinmemberanonymous19-Oct-05 20:07 
AnswerRe: Using a static method instead Pinmemberaprenot21-Oct-05 10:17 
GeneralRe: Using a static method instead PinmemberToli Cuturicu20-Dec-10 11:22 
GeneralExcellent! But Pinmembercccccbbbbb19-Oct-05 14:41 
GeneralRe: Excellent! But Pinmemberkim.hauser22-Oct-05 0:29 
AnswerRe: Excellent! But PinmemberKevan Davis1-Dec-06 11:18 

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
Web01 | 2.8.140814.1 | Last Updated 13 Oct 2005
Article Copyright 2005 by kim.david.hauser
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid