Информация об изменениях

Сообщение Re[2]: Качество .Net-конференций от 24.04.2019 1:46

Изменено 24.04.2019 2:08 Разраб

Re[2]: Качество .Net-конференций
Здравствуйте, okon, Вы писали:

AA>>Во-первых не указан модификатор this, во-вторых парень лихо прикрутил логирование посредством Bind,

AA>>хотя реализация вызывает функцию только если результат Success, т.е. ошибку уже не залогировать.
O>смотря как написать функцию Log.

O>Там параметры просто местами надо поменять и this поставить.

O>у непосредственно Log должна быть сигнатура
O>
O>Result<R> Log( Result<I> input )
O>{
O>   if (!input.Success)
O>      logger.Error("ERROR : {input.Error}");
O>}
O>


К сожалению, этот вариант не работает,
Bind вызывает Log только if(input.Success),
получается Log должен быть не аргументом Bind
а расширением Result?
Re[2]: Качество .Net-конференций
Здравствуйте, okon, Вы писали:

AA>>Во-первых не указан модификатор this, во-вторых парень лихо прикрутил логирование посредством Bind,

AA>>хотя реализация вызывает функцию только если результат Success, т.е. ошибку уже не залогировать.
O>смотря как написать функцию Log.

O>Там параметры просто местами надо поменять и this поставить.

O>у непосредственно Log должна быть сигнатура
O>
O>Result<R> Log( Result<I> input )
O>{
O>   if (!input.Success)
O>      logger.Error("ERROR : {input.Error}");
O>}
O>


К сожалению, этот вариант не работает,
Bind вызывает Log только if(input.Success),
получается Log должен быть не аргументом Bind
а расширением Result?

Переписал так:
        public static Result<R> Bind<T, R>(this Result<T> input, Func<Result<T>, Result<R>> function)
        {
            return !input.IsSuccess ? Result<R>.Fail(input.Error) : function(input);
        }
        public static Result<T> Log<T>(this Result<T> value, string description = "")
        {
            if (value.IsSuccess)
                WriteLine($"{DateTime.Now:s} : [OK] : {value.Value} ({description})");
            else
                WriteLine($"{DateTime.Now:s} : [ER] : {value.Error} ({description})");
            return value;
        }


Вроде работает!