我需要将属性映射表达式的字典传递给我的函数。例如,可能会传递以下地图:
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
。是否可以传递表达式字典,然后在不调用表达式的情况下检测每个表达式结果的实际类型?