using System.Linq.Expressions;
using System.Collections;
using System.Collections.Generic;
public static void Main()
Console.WriteLine("****************** C# Equivalent Output **************************\n\n");
Console.WriteLine(cResult);
Console.WriteLine("\n\n***************** Expression Tree Output **************************\n\n");
var nArgument = Expression.Parameter(typeof(int), "n");
var result = Expression.Variable(typeof(int), "result");
LabelTarget label = Expression.Label(typeof(int));
var initializeResult = Expression.Assign(result, Expression.Constant(1));
var ifTrueBlock = Expression.Block(
Expression.Assign(result,
Expression.Multiply(result, nArgument)),
Expression.PostDecrementAssign(nArgument)
var ifThenElseExpr = Expression.IfThenElse(
Expression.GreaterThan(nArgument, Expression.Constant(1)),
Expression.Break(label, result)
BlockExpression body = Expression.Block(
Expression.Loop(ifThenElseExpr, label)
var factorial = Expression.Lambda<Func<int, int>>(body, nArgument).Compile();
Console.WriteLine(factorial(6));