public static void Map<T>(Expression<Func<T, object >> expression)
{
var memberExpression = (expression.Body as UnaryExpression).Operand as MemberExpression;
var name = memberExpression.Member.Name;
}
用法:
Map<Article>(x => x.Name)
名称的类型为字符串。
我如何获得该类型?
答案 0 :(得分:3)
var returnType = memberExpression.Member is MethodInfo
? ((MethodInfo)memberExpression.Member).ReturnType
: ((PropertyInfo)memberExpression.Member).PropertyType;
我假设你想要返回类型。如果您想要定义方法的类型,请使用memberExpression.Member.DeclaringType
。
答案 1 :(得分:1)
如果你知道它永远是一个属性(而不是一个字段),你可以这样做:
public static void Map<T>(Expression<Func<T, object>> expression)
{
var memberExpression = (MemberExpression)expression.Body;
var property = (PropertyInfo)memberExpression.Member;
var name = property.Name.Dump();
var type = property.PropertyType.Dump();
}
这也解决了我在评论中提到的错误。
答案 2 :(得分:1)
这是一个简单的表达式扩展方法,可能对其他人有用。
public static Type GetPropertyType<TModel, TValue>(this Expression<Func<TModel, TValue>> expression)
{
var body = expression.Body as MemberExpression;
if (body == null)
{
throw new ArgumentException("'expression' should be a member expression");
}
return ((PropertyInfo)body.Member).PropertyType;
}
样本用法:
if (expression.GetPropertyType() == typeof(DateTime))
答案 3 :(得分:-3)
不应该太困难:
x.Name.GetType()