2017-05-02 1 views
0
 
public void ThisStructureIsRepeatedALot(){ 
     Bla bla = ProcessBla(); 
     if (bla != null) { 

      // this part actually differs 

     } 
    } 

public void Addition(){ 
     Bla bla = ProcessBla(); 
     if (bla != null) { 

      bla+=foo; 
// ... more complicated stuff 
     } 
    } 

public void Division(){ 
     Bla bla = ProcessBla(); 
     if (bla != null) { 

      bla/=foo; 
      // ... more complicated stuff differs from above 
     } 
    } 

// etc 

Frage von Spielzeug Beispielstruktur beispielhaft genannten SchnipselC# OOP - Abstractify vorformulierten/Blackbox für die Wiederverwendung

Für eine Reihe von verschiedenen Methoden, die ähnlich vorformulierten vor bedingten haben ihre unterschiedlichen Code aufrufen, was ist der richtige Weg es abstrahieren, so dass nicht jede dieser ähnlichen Methoden 2 Zeilen (ohne Klammer) auf Kesselplatte verschwenden muss?

+1

Große existiert schreiben können Frage. Schade, ich habe keine Ahnung, wonach du fragst: D –

+1

Eine andere Möglichkeit besteht darin, eine Fortsetzung an ProcessBla selbst zu übergeben: 'ProcessBla (bla => {// komplizierte Sachen hier});'. – Evk

+0

Es ist nicht klar, warum jede Methode 'ProcessBla()' (vielleicht falsches Design hier) aufrufen würde, aber ich würde 'void' mit dem Delegaten hinzufügen (zB' Aktion '), die es ausführen, falls das Ergebnis der Verarbeitung nicht null ist , indem man kompliziertes Zeug weiterleitet, da Lambda kürzer ist. – Sinatr

Antwort

1

Sie könnten C# 7 TryParse Muster verwenden.

bool TryProcessBla(out Bla bla) 
{ 
    bla = ProcessBla(); 
    return bla != null; 
} 

Und dann

public void Addition() 
{ 
    if (TryProcessBla(out Bla bla) { 

     bla+=foo; 
     // ... more complicated stuff 
    } 
} 

Beachten Sie, dass sich das Muster nicht C# 7 spezifisch ist, aber der out Bla bla Teil, dass Sie dies in einer oneliner nur in C# 7.