I';在C#中构建API/框架时,当属性设置为无效值时,如何返回验证错误消息?

I';在C#中构建API/框架时,当属性设置为无效值时,如何返回验证错误消息?,c#,frameworks,validation,C#,Frameworks,Validation,我正在C#中构建API,当属性设置为无效值时,如何返回验证错误消息?我应该抛出异常还是做其他事情?你推荐什么?我可以使用任务并行库中的AggregateException类,这样我就可以一次抛出多个。最佳实践是什么 最好的方法是在每个属性设置器被设置为无效值时抛出一个 我认为这取决于财产。另一张海报建议ArgumentException,但我觉得这更具体于传递给方法的无效参数。我可能会创建自己的异常(继承ApplicationExecOption),并使它们特定于我的属性,如: Property

我正在C#中构建API,当属性设置为无效值时,如何返回验证错误消息?我应该抛出异常还是做其他事情?你推荐什么?我可以使用任务并行库中的AggregateException类,这样我就可以一次抛出多个。最佳实践是什么

最好的方法是在每个属性设置器被设置为无效值时抛出一个

我认为这取决于财产。另一张海报建议ArgumentException,但我觉得这更具体于传递给方法的无效参数。我可能会创建自己的异常(继承ApplicationExecOption),并使它们特定于我的属性,如:

PropertyNumericRangeException(范围为0-100的数值属性)

PropertyStringLength异常(限制字符串长度)


我想您也可以为此扩展AggregateException,但这里的限制几乎是sky…

使用验证框架,如,或者您可以创建自己的验证框架。不要为每个验证错误抛出一个异常,而是用一个异常报告所有错误。

如果您使用的是较新的.NET版本,尤其是如果您要使用WPF/Silverlight,那么实现IDataErrorInfo可能是一个更好的解决方案。Karl Shiflett写过在属性设置器中抛出异常与实现IDataErrorInfo的比较

如果您有以下验证规则: 依赖于一个或多个属性 价值观,开发人员现在必须 编写代码以设置 避免异常的特定顺序 被扔了。这是一个疯狂的故事 与所有.NET相反 类设计文档。你能 你必须把每一件衣服都包起来 使用try设置属性的代码 挡块。再说一遍,林克呢 要填充的查询 对象和不必要的异常是 被属性设置程序抛出。 这使得编写可维护代码成为可能 难度更大,回报率为零。 随着时间的推移,当代码发生变化时 外地补充说,我们必须考虑在内 usless异常处理和be 在其中的顺序的认知者 属性设置器被调用或更改


这些错误消息是针对API用户(程序员)还是应用程序用户(普通人)?这是个好问题。这将是应用程序程序员。这里有一个问题我有例外。使用异常时,验证规则不透明。程序员必须使用试错法来确定有效的属性长度或属性是否可以为空。我希望能够通过API将验证规则之类的东西推送到使用API的任何程序中,这样API使用者就不必从API中复制逻辑。有关从中派生的最佳实践,请参阅。如果我作为“最终用户”使用此方法我必须检查异常类型,如果我想将验证错误消息传递给客户机,那么我必须编写一组逻辑来排列ui字段和异常消息。对于处理这种逻辑,您有什么建议?我认为您将验证与应用程序错误混淆了。OP专门为程序员而不是用户讨论错误消息。因此,您不应该捕捉这些异常,以便以最终用户可以纠正错误的方式向最终用户显示消息;如果你得到了异常,那就意味着你有一个bug。因此,最好不要处理它,让它冒泡,让您的全局异常处理程序捕捉它(如果有的话)。