在C#中返回带有函数的2个字符串

时间:2013-05-12 07:06:52

标签: c# string return

我有一个函数,我想返回2个值?这可能吗?

这是我的代码,但似乎不喜欢我想要返回2个值

public string PlayerCards(string player1C1, string player1C2)
        {

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

我做了一些谷歌搜索,但我找不到我需要的东西。

4 个答案:

答案 0 :(得分:16)

一些选项:

  • 使用out参数:

    public string PlayerCards(out string x)
    

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

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

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

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

您的代码尝试做的事情一点也不清楚 - 方法的名称不明确,您不使用参数。当你澄清了方法试图达到的目的 - 对我们自己和对我们而言 - 答案可能会变得更加明显。

我还鼓励你在适当的地方使用局部变量 - 我怀疑generatedCard应该是一个局部变量,而不是它当前的(可能)实例变量。

答案 1 :(得分:10)

你可以返回元组:Tuple<string, string>

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

return t;

答案 2 :(得分: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;
    }

答案 3 :(得分:2)

我认为你可以使用字符串数组......

第二种方法是使用包含两个字符串值的结构或具有两个字符串成员的类

看这里:

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

祝你好运。