use*_*867 2 c# asp.net-mvc data-annotations
我有一些代码枚举一个对象,并根据其ValidationAttribute记录它所有的错误.
当它找到它们时,我希望创建一个名为RuleViolations的自定义类的集合.RuleViolation类如下所示:
public string Message { get; set; }
public LambdaExpression Property { get; set; }
Run Code Online (Sandbox Code Playgroud)
属性是lambda表达式,因此该属性不必是字符串.当我手动添加错误但是我不确定如何指定LambdaExpression时,我所拥有的是属性的PropertyDescriptor对象.
有谁知道怎么样?
LambdaExpression和PropertyDescriptor网站主要在不同的世界(很多我最初的沮丧).LambdaExpression将对PropertyInfo感兴趣,而不是PropertyDescriptor.
如果您有PropertyInfo,则可以通过以下方式构造Expression:
PropertyInfo prop = ...
ParameterExpression param = Expression.Parameter(prop.ReflectedType, "x");
LambdaExpression lambda = Expression.Lambda(
Expression.Property(param, prop), param);
Run Code Online (Sandbox Code Playgroud)
您可以还尝试通过名称来解决,但这并不一定是相同的,特别是如果你使用的是自定义类型模型(ICustomTypeDescriptor等):
PropertyDescriptor prop = ...
ParameterExpression param = Expression.Parameter(prop.ComponentType, "x");
LambdaExpression lambda = Expression.Lambda(
Expression.Property(param, prop.Name), param);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |