Search code examples
c#reflectioncodedom

Dynamically execute string as code in C#


I need to convert string to executable code. The string is in foreach statement.

foreach (InsuredItem _i in p.InsuredItems)
{
    string formula = "(_i.PremiumRate/100)*SumAssured";
    _i.Premium = (Execute formula);
}

The formula is loaded from setup. this is just a demonstration. I need to execute the string in foreach loop. Thanks.


Solution

  • Assuming that your formula is valid C# code and that it uses a known set of local variables (so that you can create a "globals" type containing all of them), you should be able to use Roslyn scripting API to do this:

    public class Globals
    {
        public InsuredItem _i;
        public decimal SumAssured;
    }
    
    …
    
    string formula = "(_i.PremiumRate/100)*SumAssured";
    var script = CSharpScript.Create<decimal>(formula, globalsType: typeof(Globals))
        .CreateDelegate();
    
    foreach (InsuredItem _i in p.InsuredItems)
    {
        _i.Premium = await script(new Globals { _i = _i, SumAssured = SumAssured });
    }