public static class ExpressionTree
{
public static bool PropertiesNotNull<T>(T obj)
{
if (obj == null) { return false; }
var type = obj.GetType();
var paraExpression = Expression.Parameter(typeof(T), "object");
object v; bool result = true;
foreach (var prop in type.GetProperties())
{
v = VisitProperty<T>(obj, prop, paraExpression, paraExpression);
if (v == null) { result = false; break; }
}
return result;
}
private static object VisitProperty<T>(object obj, PropertyInfo prop, Expression instanceExpression, ParameterExpression parameterExpression)
{
MemberExpression memExpression = Expression.Property(instanceExpression, prop);
Expression objectExpression = Expression.Convert(memExpression, typeof(object));
Expression<Func<T, object>> lambdaExpression = Expression.Lambda<Func<T, object>>(objectExpression, parameterExpression);
Func<T, object> func = lambdaExpression.Compile();
// object v = func((T)obj);
return func((T)obj);
}
}
//调用
Student stu=new Student();
if (!ExpressionTree.PropertiesNotNull(stu)) { return "请完善信息后提交!"); }