Мне нравится использовать это расширение, если мне нужно выполнить условное действие на объекте:Если-то еще расширение
T IfTrue<T>(this T source, Func<T, bool> shouldPerform, Action<T> action) {
if (shouldPerform(source)) {
action(source);
}
return source;
}
Но мне было интересно, что было бы лучшим решением, если мне нужно как true
и else
действия? использование изображения я должен выглядеть следующим образом:
someObject.IfTrue(self => ValidateObject(self), self => self.TrueAction()).Else(self => self.FalseAction());
Одна из возможностей я думал добавлял дополнительный параметр IfTrue
метода:
T IfTrue<T>(this T source, Func<T, bool> shouldPerform, Action<T> trueAction, Action<T> falseAction = null) {
if (shouldPerform(source)) {
trueAction(souce);
} else if (falseAction != null) {
falseAction(source);
}
return source;
}
Но тогда я в конечном итоге использовать его в
someObject.IfTrue(self => ValidateObject(self), self => self.TrueAction(), self => self.FalseAction());
и не имея его дополнительно Else
e XTension.
Итак, мой вопрос: можно ли разделить его на два отдельных расширения (обратите внимание: оба расширения все равно должны возвращать T
)?
Зачем использовать это вместо инструкции 'if/else'? 'source' уже находится в области видимости, поэтому вам не нужно возвращать его. – Lee
@Lee Я использую расширение 'IfTrue', если мне нужно связать его другими методами. И возврат его обратно позволяет впоследствии добавить еще один метод в цепочку. –
проблема в том, что цепочка iftrue предполагает, что цепочка имеет разные вещи в зависимости от результата (например, linq 'where'), в этом случае это не так. Это просто похоже на Fancy Code Syndrome – pm100