Il più grande vantaggio per me è la leggibilità.
Considerare per un momento una tipica istruzione LINQ che utilizza il concatenamento del metodo:
var total = myList.Where(x => x.num > 5)
.Select(x => x.num)
.Distinct()
.Aggregate((total, next) => total + next);
Piuttosto facile da leggere. Ma potresti usare i metodi statici per fare la stessa cosa.
var total = Enumerable.Aggregate(Enumerable.Distinct(Enumerable.Select(Enumerable.Where(myList, x => x.num > 5), x.num)), (total, next) => total + next);
E anche se lo formattassi un po ':
var total = Enumerable.Aggregate(
Enumerable.Distinct(
Enumerable.Select(
Enumerable.Where(myList, x => x.num > 5)
, x.num)
)
, (total, next) => total + next);
È ancora difficile da leggere. I lamda sono molto lontani dai nomi delle funzioni con cui vanno. Diventa piuttosto difficile districarlo e capire cosa sta realmente accadendo. La versione concatenata del metodo è molto più facile da leggere (almeno per me).
Scegli ciò che rende il codice più facile da leggere e utilizzare. Se un'operazione può essere applicabile a un oggetto nella maggior parte o in qualsiasi contesto, andrei con un metodo di estensione (trasformazioni, formattazione, ecc.) Se è applicabile solo in un determinato contesto, vai con metodi statici ( InterestCalculator.CalculateInterest(decimal principle, decimal interestRatePerMonth, int numberOfMonths)
farebbe un metodo di estensione scadente per decimali o interi).