如何检测表达式结果的实际类型?

时间:2018-08-20 04:40:22

标签: c# lambda

我需要将属性映射表达式的字典传递给我的函数。例如,可能会传递以下地图:

var map = new Dictionary<string, Expression<Func<T, object>>>
{
    {"ID", original => original.ID },                         // int
    {"Name", original => original.User.Name },                // string
    {"Timestamp", original => original.Modified },            // DateTime
    {"Cost", original => original.Price * original.Quantity } // Double
};

如您所见,返回的类型是不同的,因此我在委托定义中使用object。在函数内部,我需要根据实际返回的类型来处理表达式,因此我必须检测类型。

public static IQueryable<T> MyFunction<T>(this IQueryable<T> source, IDictionary<string, Expression<Func<T, object>>> map)
{
    foreach (Expression<Func<T, object>> transform in map.Values)
    {
        Type type = transform.ReturnType;
        // do something in dependense of detected type
    }
}

当然,type始终是object。是否可以传递表达式字典,然后在不调用表达式的情况下检测每个表达式结果的实际类型?

0 个答案:

没有答案