2013-05-12 3 views
7

Ich habe eine Funktion, wo ich 2 Werte zurückgeben möchte? Ist das möglich?Zurückgeben von 2 Strings mit Funktion in C#

Das ist mein Code, aber es scheint nicht zu, dass ich zwei Werte zurückgeben möchten

public string PlayerCards(string player1C1, string player1C2) 
     { 

      generatedCard = randomCard.Next(1, 52); 
      player1C1 = generatedCard.ToString(); 
      player1C1 = player1C1 + ".png"; 
      return player1C1, player1C2; 
     } 

Ich habe einige googeln, aber ich habe nicht gefunden, was ich brauche.

+0

Werden immer nur zwei Kartenbildnamen zurückgegeben? Oder möchtest du, dass es allgemeiner ist, also mehr als zwei zurückgeben kann? Wenn ja, könnten Sie einfach eine 'List ' zurückgeben. Ich würde auch in Betracht ziehen, die Methode in 'PlayerCardImageFileNames()' umzubenennen. –

+0

Diese Frage wurde vor ein paar Tagen gestellt. Http://stackoverflow.com/questions/16411685/return-multiple-values-from-a-class-to -method – FeliceM

Antwort

14

Einige Optionen:

  • Verwenden Sie einen out Parameter:

    public string PlayerCards(out string x) 
    

    einen Rückgabewert, und stellen Sie die out Parameter (x in diesem Fall) auf einem anderen Wert; Der aufrufende Code muss ebenfalls ein Argument mit out angeben, und nachdem der Aufruf abgeschlossen ist, kann der Aufrufer den in der Methode festgelegten Wert sehen.

    (es ist nicht klar, warum Sie Parameter überhaupt sind zu akzeptieren;. Sie scheinen nicht wirklich, sie zu benutzen)

  • Return ein Tuple<string, string>

  • Erstellen Sie eine neue Art, die beiden Werte zu speichern zusammen , vorausgesetzt, es ist eine sinnvolle Kombination. Dies ist definitiv eine gute Wahl, wenn die Werte in einer Weise verwandt sind, die Sie anderswo verwenden. Beispiel: Anstatt eine Methode zu verwenden, die eine Zeichenfolge für die Farbe einer Karte und eine für den Wert zurückgibt, erstellen Sie einen Typ PlayingCard.
  • Refaktorieren Code in zwei Methodenaufrufe, von denen jede einen einzelnen Wert

Es ist nicht klar, was Ihr Code versucht zu tun zurückkehren - der Name der Methode ist nicht klar, und Sie don‘ t Verwenden Sie die Parameter. Wenn Sie geklärt haben, was die Methode zu erreichen versucht - sowohl für Sie als auch für uns selbst -, könnte die Antwort deutlicher werden.

Ich würde Sie auch ermutigen, lokale Variablen zu verwenden - ich vermute, generatedCard sollte eine lokale Variable anstelle der (vermutlich) Instanzvariable sein, die es derzeit ist.

+1

Wie hast du das in 2 Minuten gründlich beantwortet ?! "Jon Skeet ist so gut, er hat ein Programm geschrieben, um automatisch Fragen zu SO für ihn zu beantworten." – Devin

+1

JonSkeet schreibt keine Antworten .. Er schreibt Programme und Code in SO ... Die Ausgabe ist in Zahlen von upvotes ... – VS1

+1

@VijayS - Ich wünschte, ich könnte mit einem Jon Skeet Sowjetrußland Parodie Witz kommen. Etwas wie "... In Jon Skeets Gedankencode schreibt sich selbst" –

10

Sie können Tupel zurückgeben: Tuple<string, string>

Tuple<string, string> t = new Tuple<string, string>(player1C1,player1C2); 

return t; 
+1

Sheesh, und ich habe die ganze Zeit eine Struktur oder etwas gemacht! Ich muss alt werden ... – clamchoda

4

Eine von mehreren möglichen Optionen:

erstellen Struktur wie folgt aus:

struct Players 
{ 
    public string Player1; 
    public string Player2; 
} 

es dann so in Ihrer Funktion verwenden:

public Players PlayerCards() 
    { 
     Players p1; 
     generatedCard = randomCard.Next(1, 52); 
     p1.Player1 = generatedCard.ToString(); 
     p1.Player2 = p1.Player1 + ".png";    
     return p1; 
    } 
2

Ich denke, dass Sie String-Array verwenden können ...

zweite Weg ist eine Struktur mit zwei String-Werte oder eine Klasse mit zwei String-Element zu verwenden ,,

Schauen Sie sich hier:

/// <summary> 
    /// Using struct 
    /// </summary> 
    struct twoStringValue 
    { 
     public string s1, s2; 
    } 

    public twoStringValue PlayerCards(string player1C1, string player1C2) 
    { 
     twoStringValue tsv; 
     generatedCard = randomCard.Next(1, 52); 
     tsv.s1 = player1C1 = generatedCard.ToString(); 
     tsv.s1 = player1C1 = player1C1 + ".png"; 
     return tsv; 
    } 


    /// <summary> 
    /// Using a class 
    /// </summary> 
    class TwoStringValue 
    { 
     public string str1; 
     public string str2; 
    } 

    public TwoStringValue PlayerCards(string player1C1, string player1C2) 
    { 
     TwoStringValue tsv; 
     generatedCard = randomCard.Next(1, 52); 
     tsv.str1 = player1C1 = generatedCard.ToString(); 
     tsv.str1 = player1C1 = player1C1 + ".png"; 
     return tsv; 
    } 

Viel Glück.

Verwandte Themen