Если вы хотите создать последовательность статических вызовов методов (или вызовов методов расширения), скажем, SomeType.Method1
, SomeType.Method2
и OtherType.Method3
, то вы можете написать метод C # Compose
, который ведет себя аналогично >>
оператор в C #:
Func<T, R> Compose<T, U, R>(Func<T, U> f1, Func<U, R> f2) {
return v => f2(f2(v));
}
Тогда вы сможете написать что-то вроде:
Compose(SomeType.Method1, SomeType.Method2).Compose(OtherType.Method3); // ...
Обратите внимание, что это будет работать только для методов, принимающих один аргумент (но вы можете определить перегруженныйверсии, которые принимают несколько аргументов, и компилятор должен иметь возможность их выводить).
Если вы вызываете методы экземпляра, тогда нет синтаксиса для ссылки только на метод - вам нужно какое-то выражение для вызова метода на,Более легким способом, чем написание метода, было бы написать лямбда-выражение:
// Chain multiple operations
Func<SomeType, SomeType> composed = v => v.Method1().Method2().Method3();
// Use chained operation two times
var v1 = composed(foo1);
var v2 = composed(foo2);