Beantwortet Methode mit 2 Rückgabewerten?

  • Donnerstag, 2. August 2012 10:15
     
     
    Hallo, ich habe eine Methode bei der ich am ende 2 Double-Werte heraus bekomme. Wie kann ich diese dem Benutzer der Methode beide zurückgeben?

Alle Antworten

  • Donnerstag, 2. August 2012 10:22
    Moderator
     
     Beantwortet

    Hallo,

    dafür gibt es mehrere Varianten:

    1. du verlangst beim Aufruf der Methode 2 spezielle Parameter:
      public void MeineMethode(out double result1, out double result2){//...
      result1 und result2 übergibst du am Ende der Methode deine beiden Werte. Durch out werden die double-Werte wie eine Referenz auf das eigentlich Objekt behandelt, soll heißen, was du in der Methode rein schreibst ist nach der Methode immernoch drin.
    2. Du erzeugst eine Struktur die du dann zurückgibst:
      struct MyResult{
          public double R1{get; set;}
          public double R2{get; set;}
      }
      Du gibst dann einfach diese Struktur zurück
      return new MyResult(){R1 = x, R2 = y};

    Vielleicht gibt es noch mehr Varianten, aber das fällt mir jetzt auf die Schnelle ein.


    Koopakiller - http://koopakiller.ko.ohost.de/

    • Als Antwort vorgeschlagen ltWPFgt Donnerstag, 2. August 2012 16:40
    • Als Antwort markiert Absoluter Anfänger Freitag, 3. August 2012 09:36
    •  
  • Donnerstag, 2. August 2012 10:24
     
     Beantwortet Enthält Code

    Hi,

    am sinnvollsten, indem Du eine eigene Klasse für die Rückgabe erstellst. Diese Klasse hat dann zwei Properties vom Typ Double.

    public class Result
    {
        public double Value1 { get; set; }
        public double Value2 { get; set; }
    
        public Result( double value1, double value2 )
        {
            this.Value1 = value1;
            this.Value2 = value2;
        }
    }
    
    Verarbeiten kann man das dann bspw. so:
    private void button1_Click( object sender, EventArgs e )
    {
        Result result = GetValues();
        MessageBox.Show( result.Value1 + "\r\n" + result.Value2 );
    }
    
    private Result GetValues()
    {
        return new Result( 1.0, 2.0 );
    }

    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    • Bearbeitet Stefan FalzMVP Donnerstag, 2. August 2012 10:26
    • Als Antwort vorgeschlagen ltWPFgt Donnerstag, 2. August 2012 16:40
    • Als Antwort markiert Absoluter Anfänger Freitag, 3. August 2012 09:36
    •  
  • Donnerstag, 2. August 2012 20:03
     
     Beantwortet Enthält Code

    Hallo Absoluter Anfänger,

    einer Methode kann immer nur ein Ergebnis zurückliefern. Warum? 1 Methode == 1 Aufgabe == 1 Ergebnis ;-)

    Natürlich kannst du ein Objekt zurückgeben das mehrere Ergebnisse enthält, und das ist auch legitim. Natürlich kannst du ein  eigenes Ergebnisobjekt erzeugen, wie es Stefan vorgeschlagen hat. Allerdings ist es auch möglich, bereits bestehende Objekte zu verwenden wie z.B. Arrays oder Listen.

    Hier ein Beispiel mit einer Liste:

    public IList<double> Foo() {
       double ergebnis1 = wert1 + wert2;
       double ergebnis2 = wert3 + wert4;
    
       return new List<double>() { ergebnis1, ergebnis2 };
    }

    Hier mit einem Array

    public double[] Foo() {
      double ergebnis1 = wert1 + wert2;
      double ergebnis2 = wert3 + wert4;
    
      return new double[] { ergebnis1, ergebnis2 };
    }
    Das mit dem out Parameter würde ich bleiben lassen. Ist recht unschön. Ich denke da mit grauen an die MFC zurück.


    Viele Grüße Holger M. Rößler

  • Freitag, 3. August 2012 09:35
     
     
    Danke, für die vielen hilfreichen Antworten. Mit sovielen Ideen habe ich da nicht gerechnet, ich glaube ich werde eine Strujtur dafür verwenden.