private static string GetArgumentValue(object argument)
if (argument.GetType().Name == "UndefinedBindingResult")
return (string)argument.GetType().GetField("Value").GetValue(argument);
return argument.ToString();
public static void Main()
var handlebars = Handlebars.Create();
handlebars.RegisterHelper("ifCond", (output, context, arguments) =>
var value1 = GetArgumentValue(arguments[0]);
var operation = GetArgumentValue(arguments[1]);
var value2 = GetArgumentValue(arguments[2]);
var returnValue1 = GetArgumentValue(arguments[3]);
var returnValue2 = GetArgumentValue(arguments[4]);
output.Write(value1 == value2 ? returnValue1 : returnValue2);
output.Write(value1 != value2 ? returnValue1 : returnValue2);
throw new Exception("ifCond: Unrecognized operation");
var template = handlebars.Compile("{{ifCond MyData eq \"01\" X Y}}");
var result1 = template.Invoke(new { MyData = "01" });
Console.WriteLine("result1 = " + result1);
var result2 = template.Invoke(new { MyData = "00" });
Console.WriteLine("result2 = " + result2);