У меня есть логика c, где я получаю результат сущности обратно. Если значение этого объекта не существует, я хочу выйти рано. Но это не считается исключением. В настоящее время я просто устанавливаю исключение на OKException
для раннего сброса, а затем проверяю исключения в конце, чтобы убедиться, что они не равны OKException
, прежде чем решить, как обработать результат. Есть ли более language.ext
способ сделать это более элегантно?
Например,
private EitherAsync<C.Error, int> ShouldContinue(MyObject myObj)
{
var result = myObj.PropertyToCheckAgainst is null
? P.Left<C.Error, int>(new OKException("PropertyToCheckAgainst does not exist."))
: P.Right<C.Error, int>(contact.PropertyToCheckAgainst);
return result.ToAsync();
}
public MyMethod()
{
var result =
from myObj in Get(myId)
from _ in ShouldContinue(myObj)
let myDomainObject = Map<MyDomainObject>(myObj)
...;
result.Match(() => {}, error =>
{
error.Exception.Match(ex =>
{
if (ex is OKException) {
return; // do nothing
}
throw ex;
}, () => {})
});
}