我有一个简单的方法设置来创建一个条目,如果它成功,返回创建的条目.如果没有返回ValidationError.
public async Task<MyNewEntry> CreateEntry(MyUser user, MyEntryRequest entry)
Run Code Online (Sandbox Code Playgroud)
如果条目有效,这很有用.但是,如果验证失败,我想返回ValidationError.
我试过这样做:
public async Task<MyNewEntry | ValidationError> CreateEntry(MyUser user, MyEntryRequest entry)
Run Code Online (Sandbox Code Playgroud)
但后来它没有编译.如何构造此方法,使其能够返回MyNewEntry或ValidationError
要做到这一点,你可以使用一个Result-Type,它由一个属性"bool Success"和一个Error以及一个Entry属性组成,其中只有一个用一个值填充,具体取决于你方法的成功.
public class CreateEntryResult
{
public bool Success {get;set;}
public MyNewEntry Entry {get;set;}
public ValdidationError Error {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
要保存一些内存(您可以在每个结果上创建一个额外的对象),您也可以返回一个结构.只需用"struct"替换我的代码中的"class"关键字.然后,包含的引用将作为值传递,您不必考虑对垃圾收集的任何影响.
另一种做法,我近年来没有看到很多是"尝试"模式,你返回一个结果类型(通常是一个bool)并使用out-parameters来返回你的值.我不确定out-parameters如何与async一起工作.
bool TryCreateEntry(..., out MyNewEntry entry, out ValidationError error)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |