Laden...

Methoden - Eingangsparameter Modifikation

Erstellt von rizi vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.057 Views
R
rizi Themenstarter:in
402 Beiträge seit 2005
vor 13 Jahren
Methoden - Eingangsparameter Modifikation

Hi, ich stand schon öfters vor folgendem Problem:


public class Data{
   public double Latitude{get;set;}
   public double Longitude{get;set;}
   public string Text{get;set;}
}


pubilc class BusinessLogic{
   public IEnumerable<Data> GetDataFromDAL(int id){
      IEnumerable<Data> data = dal.GetData(id);
      ModifiyData(data);
    }

    public void ModifyData(IEnumerable<Data> data){
       //zb.
       foreach(var currData in data){
          currData.Longitude += 0.001;
       }
     }
}

So wie ich es im obigen Code dargestellt habe sollte es ja nicht sein, richtig??
Eingangsparameter sollten soweit ich weiß nicht verändert werden, wie wäre die richtige Herangehensweise für so etwas?

Folgende Idee:
Die Mehtode ModifyData gibt ebenfalls IEnumerable<Data> zurück, erzeugt also innerhalb der Methode eine neue List, die Frage die sich mir nun stellt: ich müsste eigentlich auch neue Data Objekte erstellen(Stichwort IClonable), die Werte von currData übernehmen u. zb. 0.0001 dazu addieren. (neue Objekte deshalb erstellen, denn es handelt sich ja um Instanzen innerhalb der Liste, daher würde es meiner Meinung nach nicht ausreichen eine neue Liste zu erstellen u. die modifizierten Daten-Objekte zu adden.

Wie seht ihr das, gibt es eine Pattern das dieses Problem löst??

Danke & Lg
rizi

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo rizi,

also ich sehe kein generelles Verbot für der Modifikation von Eingangsparametern. Die Array.Sort-Methode sortiert ja auch das übergebene Array. Wichtig ist, dass das möglichst schon aus dem Namen der Methode und spätestens aus ihrer Dokumentation klar hervorgeht.

herbivore

R
rizi Themenstarter:in
402 Beiträge seit 2005
vor 13 Jahren

@herbie

Danke für die schnelle Antwort, wie würde man es machen, wenn die Eingangsparameter nicht modifiziert werden dürften??

danke
rizi

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo rizi,

ich stehe dem Klonen von Objekten sehr skeptisch gegenüber (siehe Kopie ohne ICloneable und Kopie ohne ICloneable). Klar kann man eine Liste kopieren, kein Problem, aber beim Kopieren der Elemente der Liste wäre ich - wenn es keine Werttypen sind - sehr zurückhaltend. In deinem Beispiel würde ich den Eingabeparameter direkt modifizieren. Schon die Verwendung von += deutet darauf hin, dass es sich hier auch konzeptionell um eine Modifikation handelt. Dann solltest du auch tatsächlich besser modifizieren statt kopieren.

herbivore

R
rizi Themenstarter:in
402 Beiträge seit 2005
vor 13 Jahren

DANKE SCHÖN!!!

Lg
rizi