alielie
2026-09-10 9ec80cafc23f5ee3278cacce3c9f86f4087b435a
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Linq.Expressions;
 
namespace DynamicExpresso
{
    /// <summary>
    /// An expression parameter. This class is thread safe.
    /// </summary>
    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<T>(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; }
    }
 
    /// <summary>
    /// Parameter with its position in the expression.
    /// </summary>
    internal class ParameterWithPosition : Parameter
    {
        public ParameterWithPosition(int pos, string name, Type type)
            : base(name, type)
        {
            Position = pos;
        }
 
        public int Position { get; }
    }
}