下面是some code from a video by Nick Chapsas的屏幕截图,显示该方法返回了2x个不同的对象类型。
我显示屏幕截图(而不是代码),因为我想强调他的IDE没有抱怨,看起来像是合法的:
public async Task<Result<Movie, ValidationFailed>> Handle(SomeCommand request, CT ct)
{
var movie = new Movie();
....
if (!validationResult.IsValid)
{
return new ValidationFailed(...);
}
....
return movie;
}
我想他的Result
类是这样的:
public readonly struct Result<TValue, TError>
{
private readonly TValue? _value;
private readonly TError? _error;
public Result(TValue value)
{
_value = value;
_error = default;
}
public Result(TError error)
{
_error = error;
_value = default;
}
public TValue? Value => _value;
public TError? Error => _error;
public bool IsSuccess => Error != null;
}
这怎么可能?
我以为他会做这样的事情:
if (!validationResult.IsValid)
{
return new Result(new new ValidationFailed(...));
}
....
return new Result(movie);
Movie
会继承Result
吗?看起来不像..
public partial class Movie
{
....
}
有人能帮忙吗?
1条答案
按热度按时间tp5buhyn1#
对于这个结构体,你还需要有两个隐式运算符,如下所示:
和一个方法来获得结果:
完整代码: