using System.Linq.Expressions;
using System.Collections;
using System.Collections.Generic;
public static void Main()
Console.WriteLine("****************** C# Equivalent Output **************************\n\n");
cResult = cResult * cValue;
Console.WriteLine(cResult);
Console.WriteLine("\n\n***************** Expression Tree Output **************************\n\n");
ParameterExpression value = Expression.Parameter(typeof(int), "value");
ParameterExpression result = Expression.Parameter(typeof(int), "result");
LabelTarget label = Expression.Label(typeof(int));
ConditionalExpression ifThenElseExpr = Expression.IfThenElse(
Expression.GreaterThan(value, Expression.Constant(1)),
Expression.MultiplyAssign(result,
Expression.PostDecrementAssign(value)),
Expression.Break(label, result)
LoopExpression loop = Expression.Loop(ifThenElseExpr, label);
BlockExpression block = Expression.Block(
Expression.Assign(result, Expression.Constant(1)),
var factorial = Expression.Lambda<Func<int, int>>(block, value).Compile();
Console.WriteLine(factorial(6));