【发布时间】:2018-11-25 07:59:19
【问题描述】:
我有一个简单的方法设置来创建条目,如果成功,则返回创建的条目。如果没有返回 ValidationError。
public async Task<MyNewEntry> CreateEntry(MyUser user, MyEntryRequest entry)
如果条目有效,这将非常有用。但是,如果验证失败,我想返回 ValidationError。
我试过这样做:
public async Task<MyNewEntry | ValidationError> CreateEntry(MyUser user, MyEntryRequest entry)
但是它没有编译。如何构造此方法,使其能够返回 MyNewEntry 或 ValidationError
【问题讨论】:
-
返回两种不同的类型通常是个坏主意。您可以简单地在 MyNewEntry 类中设置一个“有效”标志来指示成功或失败。
-
是的,我试图避免修改类型,因为它们是第三方。我想我会做一个知道如何处理它的包装类。
-
使用
Tuple?家长班?真的听起来你应该抛出一个异常。验证失败不是您可以在编译时解决的问题 -
这将是异常驱动的设计,考虑到异常对应用程序的影响,在任何情况下都应该避免这种情况。当你知道会发生什么时,避免抛出异常。 Validation-Result,不管是哪一种,都不例外。