Почему необходимо преобразование в деревьях выражений

Из этот вопрос , который я задал 5 минут назад, ясно, что следующий код вызывает исключение, заявляя, что

Необработанное исключение: System.InvalidOperationException: The бинарный оператор Equal не определен для типов 'System.Nullable`1 [System.Int32]' и 'System.Int32'.

Код

public static void GetResultCollection() {
        AccrualTrackingEntities db = new AccrualTrackingEntities();
        var result = db.CreateQuery(String.Format("[{0}]", typeof(T).Name + "s"));

        int? ItemTypeValue = 1;

        var param = Expression.Parameter(typeof(T));

        var lambda = Expression.Lambda>(
            Expression.Equal(
                Expression.Property(param, "ProcInstId"),
                Expression.Constant(ItemTypeValue)),
            param);

        var list = result.Where(lambda).ToList();
    }

Однако этот код с типом, явно указанным в Expression.Constant , действительно работает

class Program {
    public static void GetResultCollection() {
        AccrualTrackingEntities db = new AccrualTrackingEntities();
        var result = db.CreateQuery(String.Format("[{0}]", typeof(T).Name + "s"));

        int? ItemTypeValue = 1;

        var param = Expression.Parameter(typeof(T));

        var lambda = Expression.Lambda>(
            Expression.Equal(
                Expression.Property(param, "ProcInstId"),
                Expression.Constant(ItemTypeValue, typeof(int?))),
            param);

        var list = result.Where(lambda).ToList();
    }

Вопрос в том, почему является Expression.Constant не может неявно преобразовать из int? в ... int?

7
задан Community 23 May 2017 в 11:45
поделиться