Сообщение 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>
К сожалению, этот вариант не работает,
Bind вызывает Log только if(input.Success),
получается Log должен быть не аргументом Bind
а расширением Result?
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>
К сожалению, этот вариант не работает,
Bind вызывает Log только if(input.Success),
получается Log должен быть не аргументом Bind
а расширением Result?
Переписал так:
Вроде работает!
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;
}
Вроде работает!