3 Stimmen

Wie kann man Methoden in .Net korrekt verketten?

In .Net können Sie Methoden verketten, die einen Wert zurückgeben oder eine Leere verwenden. Ist einer von beiden der "richtige Weg"?

Man könnte also sagen

1)

Foo myFoo = new Foo();
myfoo.Bars = 
  myBars.DoSomethingCool(x)
  .DoSomethingElse(y)
  .AndSomethingElse(z);

public static IList<IBar> DoSomethingCool(this IList<IBar> source, object x)
{
  IList<IBar> result = //some fn(source)
  return result;
}

In diesem Fall müssen alle 3 Erweiterungsmethoden IList (der Typ für myFoo.Bars) zurückgeben

oder es könnte auch geschrieben werden als

2)

myBars.DoSomethingCool(x)
.DoSomethingElse(y)
.AndSomethingElse(z);

public static void DoSomethingCool(this IList<IBar> source, object x)
{
  //Modify source
  source = //some fn(source)
  //Don't return anything
}

in diesem Fall geben die Erweiterungsmethoden einen leeren Wert zurück, bearbeiten aber das Quellobjekt, das hereinkommt?

UPDATE Simon hatte Recht mit seiner Antwort, dass 2) nicht kompilierbar ist. Hier ist, wie das umgeschrieben werden könnte:

DoSomethingCool(myBars)
.DoSomethingElse(myBars)
.AndSomethingElse(myBars);

myBars würde sich dann innerhalb des Aufrufs jeder Methode ändern und die Methoden würden ungültig zurückkehren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X