dotnet返回2种类型中的1种

mwi*_*son 2 .net c#

我有一个简单的方法设置来创建一个条目,如果它成功,返回创建的条目.如果没有返回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)

但后来它没有编译.如何构造此方法,使其能够返回MyNewEntryValidationError

Chr*_*ris 5

要做到这一点,你可以使用一个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)