Элегантный способ связывания глобальных методов и регистрации результатов - PullRequest
1 голос
/ 30 декабря 2010

Представьте, что у меня есть набор глобальных методов, которые не связаны ни с какими конкретными классами.Каждый метод принимает ровно один объект и возвращает ровно один объект различных типов.

Я хочу иметь возможность связать эти методы вместе, чтобы объект, возвращаемый одним методом, передавался в качестве параметра следующему методу и т. Д.на.Методы расширения - это самый простой и изящный способ, которым я могу воспользоваться для достижения этой цели:

var result = someObj.ExtensionMethod1().ExtensionMethod2().ExtensionMethod3();

Однако у меня также есть метод log, который принимает параметр объекта, и я хочу передать результат каждогометод к этому log методу.Например:

var result1 = someObj.ExtensionMethod1();
log(result1);
var result2 = result1.ExtensionMethod2();
log(result2);
var result3 = result2.ExtensionMethod3();
log(result3);

Есть ли более элегантный способ сделать это, чтобы мне не приходилось создавать временные переменные для передачи каждый раз, когда я вызываю метод?

1 Ответ

3 голосов
/ 30 декабря 2010

Вы ищете

public static T Log<T>(this T thing) {
    ...
    return thing;
}

var result = someObj.ExtensionMethod1().Log()
                    .ExtensionMethod2().Log()
                    .ExtensionMethod3().Log();

(универсальный параметр необходим для использования возвращаемого значения без приведения)

Метод Dump() LINQPad работает аналогичным образом.

...