using System;
using System.Linq;
using System.Linq.Expressions;
public class Test
{
public static void Main()
{
long max = 12;
int count = 2;
Expression<Func<long,int,bool>> condition;
Expression<Func<long,bool>> exp1 = x => x < max;
if (count > 0)
{
Expression<Func<int,bool>> exp2 = x => x > -1;
condition = Expression.Lambda<Func<long,int,bool>>(
Expression.AndAlso(
Expression.Invoke(exp1, exp1.Parameters)
, Expression.Invoke(exp2, exp2.Parameters)
)
, exp1.Parameters.Concat(exp2.Parameters)
);
} else {
condition = Expression.Lambda<Func<long,int,bool>>(
Expression.Invoke(exp1, exp1.Parameters)
, exp1.Parameters.Concat(new[]{Expression.Parameter(typeof(int))})
);
}
var comparator = condition.Compile();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7Cgpsb25nIG1heCA9IDEyOwppbnQgY291bnQgPSAyOwoKRXhwcmVzc2lvbjxGdW5jPGxvbmcsaW50LGJvb2w+PiBjb25kaXRpb247CgpFeHByZXNzaW9uPEZ1bmM8bG9uZyxib29sPj4gZXhwMSA9IHggPT4geCA8IG1heDsKCmlmIChjb3VudCA+IDApCnsKICAgIEV4cHJlc3Npb248RnVuYzxpbnQsYm9vbD4+IGV4cDIgPSB4ID0+IHggPiAtMTsKICAgIGNvbmRpdGlvbiA9IEV4cHJlc3Npb24uTGFtYmRhPEZ1bmM8bG9uZyxpbnQsYm9vbD4+KAogICAgICAgICAgICBFeHByZXNzaW9uLkFuZEFsc28oCiAgICAgICAgICAgIAlFeHByZXNzaW9uLkludm9rZShleHAxLCBleHAxLlBhcmFtZXRlcnMpCiAgICAgICAgICAgICwgICBFeHByZXNzaW9uLkludm9rZShleHAyLCBleHAyLlBhcmFtZXRlcnMpCiAgICAgICAgICAgICkKICAgICAgICAsICAgZXhwMS5QYXJhbWV0ZXJzLkNvbmNhdChleHAyLlBhcmFtZXRlcnMpCiAgICAgICAgKTsKfSBlbHNlIHsKCWNvbmRpdGlvbiA9IEV4cHJlc3Npb24uTGFtYmRhPEZ1bmM8bG9uZyxpbnQsYm9vbD4+KAogICAgICAgIEV4cHJlc3Npb24uSW52b2tlKGV4cDEsIGV4cDEuUGFyYW1ldGVycykKICAgICAgICAsICAgZXhwMS5QYXJhbWV0ZXJzLkNvbmNhdChuZXdbXXtFeHByZXNzaW9uLlBhcmFtZXRlcih0eXBlb2YoaW50KSl9KQogICAgICAgICk7Cn0KdmFyIGNvbXBhcmF0b3IgPSBjb25kaXRpb24uQ29tcGlsZSgpOwoKCX0KfQ==