【问题标题】:Return two strings with a function in C# [duplicate]在C#中使用函数返回两个字符串[重复]
【发布时间】:2013-05-06 11:31:38
【问题描述】:

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

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

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

【问题讨论】:

  • 这是否总是只返回两个卡片图像名称?或者你想让它更通用,所以它可以返回两个以上?如果是这样,您可以只返回一个List<string>。我还考虑将方法重命名为PlayerCardImageFileNames()
  • 前几天有人问过这个问题。stackoverflow.com/questions/16411685/…

标签: c# string return


【解决方案1】:

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

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

return t;

【讨论】:

  • Sheesh,我一直在制作结构或其他东西!我一定是老了……
【解决方案2】:

一些选项:

  • 使用out 参数:

    public string PlayerCards(out string x)
    

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

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

  • 返回一个ValueTuple&lt;string, string&gt;,最好使用 C# 7 元组来提供元素名称

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

完全不清楚您的代码试图做什么 - 方法的名称不清楚,并且您没有使用参数。当您澄清了该方法试图实现的目标时——无论是对你自己还是对我们——答案可能会变得更加明显。

我还鼓励您在适当的情况下使用局部变量 - 我怀疑 generatedCard 应该是一个局部变量,而不是它当前的(大概)实例变量。

【讨论】:

  • 你是如何在 2 分钟内彻底回答这个问题的?! “Jon Skeet 太棒了,他编写了一个程序来为他自动回答关于 SO 的问题。”
  • JonSkeet 不写答案..他用 SO 编写程序和代码...输出是点赞数...
  • @VijayS - 我真希望我能带着 Jon Skeet 苏联俄罗斯的模仿笑话来。类似“......在 Jon Skeet 的脑海中,代码会自行编写”
【解决方案3】:

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

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

看这里:

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

祝你好运。

【讨论】:

    【解决方案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;
        }
    

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 2011-04-17
      • 2023-03-17
      • 2016-07-13
      • 1970-01-01
      • 2017-05-30
      • 2021-05-19
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多