【问题标题】:Method should return multiple values方法应该返回多个值
【发布时间】:2010-05-27 06:10:45
【问题描述】:

我在 C# 中有方法,我必须从该方法返回多个值,而不使用像数组这样的集合。有什么靠谱的方法吗?

【问题讨论】:

标签: c#


【解决方案1】:

是的,out 关键字:

public void ReturnManyInts(out int int1, out int int2, out int int3)
{
    int1 = 10;
    int2 = 20;
    int3 = 30;
}

然后这样称呼它:

int i1, i2, i3;
ReturnManyInts(out i1, out i2, out i3);

Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(i3);

哪个输出:

10
20
30

编辑:

我看到很多帖子都建议为此创建自己的课程。这不是必需的,因为 .net 为您提供了一个类来做他们已经说过的事情。 Tuple 类。

public Tuple<int, string, char> ReturnMany()
{
    return new Tuple<int, string, char>(1, "some string", 'B');
}

然后你可以像这样检索它:

var myTuple = ReturnMany();
myTuple.Item1 ...
myTuple.Item2 ...

存在泛型重载,因此您的元组中最多可以有 8 个唯一类型。

【讨论】:

  • 另外,Tuple.Create 方法可以推断类型:return Tuple.Create(1, "some string", 'B');
  • 请注意,Tuple 是 .NET 4.0 的新功能,Jibu 可能(还没有)拥有。
【解决方案2】:

嗯,你可以使用:

  • 自定义类/结构/类型,包含您的所有值
  • out参数

即:

class MyValues
{
    public string Val1 { get; set; }
    public int Val2 {get; set; }
}

public MyValues ReturnMyValues();

public void ReturnMyValues(out string Val1, out int Val2);

【讨论】:

    【解决方案3】:

    如果您使用的是 .NET 4.0,则可以使用 generic Tuple 类之一从方法调用中返回多个值。静态 Tuple 类提供了创建 Tuple 对象的方法。因此,您不必为该方法定义自己的返回类型。

    public Tuple<string,int> Execute()
    {
      return new Tuple<string,int>("Hello World", 2);
    }
    

    【讨论】:

      【解决方案4】:

      是的,可以创建一个包含多个属性的新类型,然后返回这个类型:

      public MyType MyMethod() 
      {
          return new MyType
          {
              Prop1 = "foo",
              Prop2 = "bar"
          };
      }
      

      【讨论】:

        【解决方案5】:

        为什么要使用“out”作为一种不可靠的方式? (或者你是不是打错字了?)

        有几种方法:

        • 返回一个包含多个的对象 值(结构/类等)
        • out
        • ref

        【讨论】:

          【解决方案6】:

          描述符类或结构。你必须把它放在某个地方,因为一个方法必须只返回一个值是合乎逻辑的。或者,您可以使用 out 或 ref,但我会返回一个类。

          顺便说一句,是什么让你不使用集合?

          【讨论】:

            【解决方案7】:
            public int Method Name(out string stringValue, out int intValue)
            {
                ///
                      Method goes here
                ///
            
                return intVaraible
            }
            

            在这里您将获得 3 个返回值 1.字符串值 2.intValue 3. intVariable

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-30
              • 2013-02-12
              • 1970-01-01
              • 2012-01-19
              相关资源
              最近更新 更多