c# - StackOverflow 与 TryValidateObject 如果对象是有效的

我正在使用 Validator.TryValidateObject() 来验证使用数据注释的对象。当对象无效时,代码执行正常。但是,如果有效,则会产生 stackoverflow 错误。

这是我的方法:

public virtual IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
    vc = new ValidationContext(this, null, null);
    List<ValidationResult> a = new List<ValidationResult>();

    Validator.TryValidateObject(this, vc, a,true);

    foreach (var item in a)
        yield return item;

    if (Name == "Arbitary")
        yield return new ValidationResult("Bad Name.", new[] { "Name" });

}

看来 TryValidateObject 也在内部调用我的方法 Validate

我使用此方法的目标是验证我的对象的所有 DataAnnotations,然后添加一些复杂的验证逻辑 - 所以我假设 TryValidateObject 会检查数据注释,然后我可以放置我自己的验证逻辑。

就目前而言,如果数据无效,我的方法会起作用——它将报告从 DataAnnotations 生成的 ValidationResults,如果名称是“Arbitary”,还会添加一个 ValidationResult,但如果数据有效,我会得到这个 stackoverflow。

有什么想法吗?如何以不会导致调用我自己的 Validate 方法的方式验证我的对象的数据注释?或者,如何解决此堆栈溢出问题?

请注意,我的类实现了 IValidatableObject 接口(interface)。

最佳答案

根据这个 SO 问题,您是否可以实现自己的数据注释属性来执行自定义验证,而不是从 Validate 继承?

How to create Custom Data Annotation Validators

https://stackoverflow.com/questions/10126599/

相关文章:

ruby-on-rails - Rails 中的 ActiveRecord::MissingAttr

qt - 来自 QProcess 的标准输出离实时很远

ruby-on-rails - Rails 路由 : override the action nam

imagemagick - 使用 imagemagick 从图像中裁剪矩形区域

typo3 - 将 locallang 值插入 TypoScript [stdWrap]

c# - 在 BackgroundWorker 线程上创建 FlowDocument

spring-mvc - 如何在 spring MVC 应用程序中的真实请求之外激活请求范围?

python - beautiful soup 从谷歌搜索中提取一个 href

ruby-on-rails - Rails Association Validations : Th

r - .onLoad 和交互式 - 意外行为?