Побег монада EitherAsyn c рано с "правильным" результатом - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть логика 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;
       }, () => {})
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...