对不起标题,我不知道该怎么用于此问题。
问题是我正在使用属性&在我的C#应用程序中验证实现的反射是这样的。
public class foo : validationBase
{
[RequiredAttribute("id is required")]
public int id { get; set; }
[RequiredAttribute("name is required")]
public string name { get; set; }
void save()
{
this.IsValid();
//some code
}
void update()
{
this.IsValid();
//some code
}
void delete()
{
// Need some magic here to ignore name attribute's required validation as only id
// is needed for delete operation
this.IsValid();
//some code
}
}
正如您在删除操作中看到的那样,我不想验证name
属性所需的验证,注意,单个属性可能还有一些验证属性,可能要求一个属性的验证不应该触发,但其他属性。
请为您提供解决此问题的意见。
答案 0 :(得分:0)
使用可标记的枚举,并将其传递并在IsValid()
中进行检查。如果需要验证操作,请验证它。像这样的事情:
public sealed class RequiredAttributeAttribute : Attribute
{
private Operation _Operations = Operation.Insert | Operation.Update;
public Operation Operations
{
get { return this._Operations; }
set { this._Operations = value; }
}
public string ErrorMessage { get; set; }
}
[Flags]
public enum Operation
{
Insert = 2,
Update = 4,
Delete = 6
}
然后验证这样的道具:
void delete()
{
this.IsValid(Operation.Delete);
}
public bool IsValid(Operation operation)
{
//...
}