-
Notifications
You must be signed in to change notification settings - Fork 5.1k
/
Copy pathExpressionTreeTranslationSampleOne.cs
37 lines (32 loc) · 1.17 KB
/
ExpressionTreeTranslationSampleOne.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Linq.Expressions;
namespace ExpressionTreeSamples;
public class ExpressionTreeTranslationSampleOne : Sample
{
public override string Name { get; } = "Translation Expression Trees, Sample 1: Replacing Constant Nodes";
public override void Run()
{
var one = Expression.Constant(1, typeof(int));
var two = Expression.Constant(2, typeof(int));
var addition = Expression.Add(one, two);
var sum = ReplaceNodes(addition);
var executableFunc = Expression.Lambda(sum);
var func = (Func<int>)executableFunc.Compile();
var answer = func();
Console.WriteLine(answer);
}
private static Expression ReplaceNodes(Expression original)
{
if (original.NodeType == ExpressionType.Constant)
{
return Expression.Multiply(original, Expression.Constant(10));
}
else if (original.NodeType == ExpressionType.Add)
{
var binaryExpression = (BinaryExpression)original;
return Expression.Add(
ReplaceNodes(binaryExpression.Left),
ReplaceNodes(binaryExpression.Right));
}
return original;
}
}