gpt4 book ai didi

c# - IDataErrorInfo 和对象的属性验证

转载 作者:行者123 更新时间:2023-11-30 22:49:27 25 4
gpt4 key购买 nike

自从我尝试学习 WPF 以来,我越来越多地看到使用接口(interface) IDataErrorInfo 将错误绑定(bind)到接口(interface)。我的问题是我通常将数据验证放在属性的 setter 中,而不是放在像 IDataErrorInfo.this[string columnName] 这样的方法中...这是一个 blog我发现这让我感到困惑。

在 .Net 3.5 中验证数据对象的好方法是什么?我是否需要在 Setter 和 IDataErrorInfo 调用的方法中实现验证?或者只是 IDataErrorInfo?或者在 setter 中调用 IDataErrorInfo?

示例:我有一个只能包含 3 到 50 个字符的名字字符串。我是将字符串验证放在 setter 中(我通常会做什么),还是现在我可以简单地使用 IDataErrorINfo.this 方法,检查属性名称并在数据长度不合适时返回字符串错误?我发现在 setter 中抛出错误而不使用接口(interface)更直观,但我看到的大多数示例使用 IDataErrorInfo 接口(interface)。

最佳答案

如果您在 setter 中抛出异常,则 IDataErrorInfo 是多余的,因为它(理论上)不能进入非法状态。 IDataErrorInfo 允许您接受所有输入,但告诉用户存在问题。这样做的好处是它可以减少对 UI 的干扰(因为用户可以继续输入数据,即使一个字段出错并被标记为错误),而且很容易报告多个一次错误 - 视觉上,而不是通过消息框等。

但是,如果你走这条路,你需要确保在将对象保存到数据库之前验证对象是否正常,等等。

您可以通过检查业务逻辑中的 .Error 来做到这一点(并检查它是否为 null/empty),假设您编写了 .Error 报告所有错误。或者类似的 Validate() 方法。

关于c# - IDataErrorInfo 和对象的属性验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com