【问题标题】:how to return 2 values from 1 c# methods? [duplicate]如何从 1 个 c# 方法返回 2 个值? [复制]
【发布时间】:2012-01-04 20:46:06
【问题描述】:

可能重复:
How can I return multiple values from a function in C#?

C# 方法总是这样:

public <return type> funName()
{
//do sth
return someValueformatedasReturnType;
}

如何从 1 个 c# 方法返回 2 个值? 这是一个面试问题,你知道的很多。谢谢!

【问题讨论】:

  • 那么你的答案是什么?
  • 我回答了/引用类/结构,我只是觉得它可能有更多方法可以达到它(我在这里得到了“元组”)。所以我在这里问问题,我不知道为什么这么多投反对票,,,,,,,,,,,diu

标签: c#


【解决方案1】:

您可以为函数参数使用 ref 或 out 关键字。

int i;
int j;

dosomething(out i, out j);    

public void dosomething(out int a, out int b)
{
   a = 1;
   b = 2;
}

调用函数后,i = 1, j = 2。ref关键字相同,msdn告诉区别:)

或者返回一个元组。

@tudor

看看你的名字,用out作为对象名:S,out是用来传值的!

【讨论】:

    【解决方案2】:

    用两个输出定义一个新的数据类型(类):

    public class Output
    {
        public object Val1 { get; set; }
        public object Val2 { get; set; }
    }
    

    并返回一个输出类型的新对象:

    public Output FunName()
    {
         Output out = new Output;
         out.Val1 = val1;
         out.Val2 = val2;
         return out;
    }
    

    【讨论】:

      【解决方案3】:

      你有几个选择:

      1. 输出参数
      2. 元组
      3. 具有 2 个属性的类

      【讨论】:

        【解决方案4】:

        从最好到最差(恕我直言):

        【讨论】:

        • 为什么Tuple 比输出参数更好?
        • @GeorgeDuckett 这是主观的,但输出参数总是向调用者添加大量样板文件(需要事先声明变量)并使方法签名复杂化(一些返回类型在左侧,一些其他人在签名中)。当然,这取决于,例如int.TryParse 作为输出参数比 Tuple&lt;bool,int&gt; 甚至 Nullable&lt;int&gt; 更有意义。
        • @George - 我不能代表迈克尔发言,但stackoverflow.com/questions/281036/… 这个问题和第一个回复总结了我对输出参数的看法。
        猜你喜欢
        • 2014-05-27
        • 2011-02-19
        • 2019-03-02
        • 1970-01-01
        • 2013-06-18
        • 2014-04-04
        • 1970-01-01
        • 2018-08-27
        • 2010-11-30
        相关资源
        最近更新 更多