我有一些代码片段如下:
想通过在运行时检查类型来解决这种情况。
PropertyInfo pi = type.GetProperty("propertyName");
var expression = new Object(); // this give me error after expression runs!
// Want to resolve this conditation by checking the type at runtime.
if (pi.PropertyType == typeof(DateTime))
{
// Want to pass the generic type parameter which has a same type created at runtime by identifying the property type.
expression = BuildExpression<T, DateTime>(data, group.Member);
}
private Func<T, V> BuildExpression<T, V>(IEnumerable<T> items, string propertyName)
{
Type type = typeof(T);
PropertyInfo pi = type.GetProperty(propertyName);
Type PropertyType = pi.DeclaringType;
var parameter = Expression.Parameter(typeof(T), propertyName);
var cast = Expression.TypeAs(parameter, pi.DeclaringType);
var getterBody = Expression.Property(cast, pi);
var exp = Expression.Lambda<Func<T, V>>(getterBody, parameter);
return exp.Compile();
}
问题: 我必须在类型上写条件我必须通过反射检查属性的类型,然后必须构建表达式。
我想要什么: 我想检查属性类型的运行时时间,并想构建与属性类型相同的该类型的运行时通用参数。
基本上我想删除类型检查If
的条件,我想要的是,代码应该并传递相同的类型,这样我就不必检查所有有条件的类型。像automatically detect the property type
Generic parameter argument
If
string, decimal, double etc..
您能否让我知道该解决方案,因为我想property
在运行时检查类型并希望使用Generic parameter type
与property 相同的类型进行创建。