using System; using System.Linq.Expressions; namespace DynamicExpresso { /// /// An expression parameter. This class is thread safe. /// public class Parameter { public Parameter(string name, object value) { if (value == null) throw new ArgumentNullException("value"); Name = name; Type = value.GetType(); Value = value; Expression = System.Linq.Expressions.Expression.Parameter(Type, name); } public Parameter(ParameterExpression parameterExpression) { Name = parameterExpression.Name; Type = parameterExpression.Type; Value = null; Expression = parameterExpression; } public Parameter(string name, Type type, object value = null) { Name = name; Type = type; Value = value; Expression = System.Linq.Expressions.Expression.Parameter(type, name); } public static Parameter Create(string name, T value) { return new Parameter(name, typeof(T), value); } public string Name { get; private set; } public Type Type { get; private set; } public object Value { get; private set; } public ParameterExpression Expression { get; private set; } } /// /// Parameter with its position in the expression. /// internal class ParameterWithPosition : Parameter { public ParameterWithPosition(int pos, string name, Type type) : base(name, type) { Position = pos; } public int Position { get; } } }