用C#中的一个函数返回两个字符串[重复]。

问题描述 投票:9回答:4

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

这是我的代码,但它似乎不喜欢我想返回两个值。

public string PlayerCards(string player1C1, string player1C2)
{
    generatedCard = randomCard.Next(1, 52);
    player1C1 = generatedCard.ToString();
    player1C1 = player1C1 + ".png";
    return player1C1, player1C2;
}
c# string return
4个回答
18
投票

一些选项。

  • 使用一个 out 参数。

    public string PlayerCards(out string x)
    

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

    (不清楚你为什么要接受参数,你似乎并没有真正使用它们。)

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

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

你的代码想要做什么根本不清楚--方法的名称不清楚,而且你也没有使用参数。当你澄清了方法想要达到的目的时--对你自己和我们来说都是如此--答案可能会变得更加明显。

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


10
投票

你可以返回 tuple。Tuple<string, string>

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

return t;

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

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

好运。

© www.soinside.com 2019 - 2024. All rights reserved.