gpt4 book ai didi

.net - 从 validateValueCallback 抛出时会发生什么不好的事情吗?

转载 作者:行者123 更新时间:2023-12-01 00:46:52 25 4
gpt4 key购买 nike

注册依赖属性时,overload of Register that accepts a validation callback可以使用。

如果该验证回调为某个值返回 false,则将该值分配给依赖项属性将失败,并且 ArgumentException将被抛出,提示无效的属性值。

现在,虽然 ArgumentException 在某些情况下是一种合适的类型,但在某些情况下应该使用一些专门的异常类型。特别是,我正在声明 enum 类型的属性,处理不受支持的值的正确方法是抛出 InvalidEnumArgumentException。 .更重要的是,我正在实现一个接口(interface),该接口(interface)将 enum 属性展示为 CLR 属性,并且在该属性的文档注释中,需要为无效抛出 InvalidEnumArgumentException值(value)观。

我看到的三种解决方案是:

  • 更改接口(interface)文档以允许更通用的异常类型。 这是不整洁的,我认为作为“解决方案”是 Not Acceptable ,因为它违背了拥有和记录专门异常类型的目的。否则,我也可以写 Exception我文档中的任何位置,让 API 用户猜测和/或尝试实际抛出哪一个。
  • 从使用依赖属性注册的验证值回调返回 false(因此在通过 SetValue 更改属性值时导致 ArgumentException,并抛出 InvalidEnumArgumentException in the setter of the CLR property wrapper。这是不整洁的,原因不同,因为 CLR 属性包装器不应包含它们自己的任何逻辑,除了调用 GetValue/SetValue 。它依赖属性本身的行为与通过其 CLR 属性 setter 访问它时的行为不同似乎不一致。
  • 在验证值回调中抛出一个 InvalidEnumArgumentException 而不是返回 false这是我现在使用的解决方案。

我已经尝试了第三种解决方案,它似乎有效。唯一的缺点可能是丢失默认的异常消息,不过这似乎是次要的坏处。

我的问题是:从验证值回调中抛出这样的东西是否有任何我不知道的副作用,这会让我(或者更确切地说,我的代码)陷入麻烦?

最佳答案

我认为您可以从验证回调中抛出更具体的异常。只是反射(reflection) WPF 代码,它看起来像这样的伪代码:

if (!validateValueCallback(newValue))
throw new ArgumentException();

因此,如果您的验证回调抛出异常,我看不出它会如何导致任何问题。

关于.net - 从 validateValueCallback 抛出时会发生什么不好的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146576/

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