11

我有一个要返回两个值的函数。这可能吗?

这是我的代码,但我似乎不想返回两个值:

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)
    

    返回一个值,并将out参数(x在本例中)设置为另一个值;调用代码将需要指定一个参数out调用完成后,调用者将能够看到方法中设置的值。

    (目前尚不清楚您为什么要接受参数;您似乎并没有真正使用它们。)

  • 返回 a ValueTuple<string, string>,理想情况下使用 C# 7 元组提供元素名称

  • 返回一个Tuple<string, string>
  • 创建一个新类型来将这两个值存储在一起,假设它是一个有意义的组合。如果这些值以您将在其他地方使用的方式相关,这绝对是一个不错的选择。例如,您可以创建一个方法,而不是让一个方法返回一个字符串来表示卡片的花色和一个字符串的值。PlayingCard类型,而不是让一个方法返回一个字符串代表卡片的花色和一个字符串的值。
  • 将您的代码重构为两个方法调用,每个方法调用都返回一个值

完全不清楚您的代码要做什么 - 方法的名称不清楚,您也没有使用参数。当你澄清了该方法试图达到的目标时——对你自己和对我们一样——答案可能会变得更加明显。

我还鼓励您在适当的情况下使用局部变量 - 我怀疑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

几个可能的选项之一:

创建一个这样的结构:

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 回答
2

I think that you can use string array...

Second way is to use a struct containing two string values or a class with two string member,,

Look at here:

    /// <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;
    }

Good Luck.

于 2013-05-12T07:31:58.007 回答