11

2 つの値を返したい関数があります。これは可能ですか?

これは私のコードですが、2 つの値を返したいとは思えません。

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

4 に答える 4

19

いくつかのオプション:

  • outパラメータを使用します。

    public string PlayerCards(out string x)
    

    1 つの値を返し、outパラメーター (xこの場合) を別の値に設定します。呼び出しコードでも引数を指定する必要がありout、呼び出しが完了すると、呼び出し元はメソッドに設定された値を確認できます。

    (パラメータをまったく受け入れている理由は明らかではありません。実際にはパラメータを使用していないようです。)

  • a を返しますValueTuple<string, string>。理想的には C# 7 タプルを使用して要素名を提供します

  • 返すTuple<string, string>
  • 意味のある組み合わせであると仮定して、2 つの値を一緒に格納する新しい型を作成します。他の場所で使用する方法で値が関連付けられている場合、これは間違いなく良い選択です。たとえば、カードのスーツに対して 1 つの文字列を返し、値に対して 1 つの文字列を返すメソッドを持つ代わりに、PlayingCard型を作成します。
  • コードを 2 つのメソッド呼び出しにリファクタリングし、それぞれが単一の値を返す

コードが何をしようとしているのかがまったく明確ではありません。メソッドの名前が明確ではなく、パラメーターを使用していません。メソッドが何を達成しようとしているのかを明確にすると、私たちだけでなくあなた自身に対しても、答えはより明白になるでしょう。

また、必要に応じてローカル変数を使用することをお勧めしますgeneratedCard。現在の (おそらく) インスタンス変数ではなく、ローカル変数にする必要があると思います。

于 2013-05-12T07:09:09.427 に答える
13

タプルを返すことができます:Tuple<string, string>

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

return t;
于 2013-05-12T07:10:46.087 に答える
4

可能なオプションの 1 つ:

次のような構造体を作成します。

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

次に、次のように関数で使用します。

public Players PlayerCards()
    {   
        Players p1;
        generatedCard = randomCard.Next(1, 52);
        p1.Player1 = generatedCard.ToString();
        p1.Player2 =  p1.Player1 + ".png";            
        return p1;
    }
于 2013-05-12T07:17:23.547 に答える