.net 从validateValueCallback抛出时是否发生了任何错误?
注册依赖项属性时,可以使用 如果该验证回调为某个值返回.net 从validateValueCallback抛出时是否发生了任何错误?,.net,wpf,dependency-properties,.net,Wpf,Dependency Properties,注册依赖项属性时,可以使用 如果该验证回调为某个值返回false,则将该值分配给依赖项属性将失败,并将抛出一个,抱怨该属性值无效 现在,虽然在某些情况下,ArgumentException是合适的类型,但在某些情况下应该使用一些特殊的异常类型。特别是,我声明了一个enum类型的属性,处理不支持的值的正确方法是抛出一个。此外,我正在实现一个接口,该接口将enum属性显示为CLR属性,并且在该属性的文档注释中,需要为无效值抛出InvalidEnumArgumentException 我看到的三种解决
false
,则将该值分配给依赖项属性将失败,并将抛出一个,抱怨该属性值无效
现在,虽然在某些情况下,ArgumentException
是合适的类型,但在某些情况下应该使用一些特殊的异常类型。特别是,我声明了一个enum
类型的属性,处理不支持的值的正确方法是抛出一个。此外,我正在实现一个接口,该接口将enum
属性显示为CLR属性,并且在该属性的文档注释中,需要为无效值抛出InvalidEnumArgumentException
我看到的三种解决方案是:
- 更改接口文档以允许更通用的异常类型。这是不整洁的,我认为不可接受是一个“解决方案”,因为它违背了<强>和记录<>强>特殊异常类型的目的。否则,我也可以在我的文档中的任何地方编写,让API用户猜测和/或尝试实际抛出哪一个
- 从使用dependency属性注册的验证值回调返回
(因此,通过更改属性值时会导致false
,并在CLR属性包装器的setter中引发ArgumentException
。这是不整洁的,原因不同,因为CLR属性包装器除了调用/,不应包含任何自己的逻辑。这对ha来说似乎不一致。)ve依赖项属性本身的行为与通过其CLR属性设置程序访问它时的行为不同InvalidEnumArgumentException
- 在validate value回调中抛出一个
,而不是返回InvalidEnumArgumentException
。这就是我现在使用的解决方案false
我的问题是:像这样从validate-value回调抛出是否有任何我不知道的副作用,并且会让我(或者更确切地说,是我的代码)产生副作用遇到麻烦了吗?我认为您可以从验证回调中抛出一个更具体的异常。只需回顾一下WPF代码,它看起来像以下伪代码:
if (!validateValueCallback(newValue))
throw new ArgumentException();
因此,如果您的验证回调抛出异常,我看不出它会导致任何问题。实际代码看起来比这复杂得多,但它确实可以归结为您编写的代码,在抛出异常的情况下没有任何特定的预防措施。因此,最好这样检查,接受:-)+感谢Abe。MSDN声明“如果这些操作调用了验证回调,并且返回false,那么将引发异常。”但它没有说明引发了什么类型的异常!