Method should return multiple values

后端 未结 7 1072
执笔经年
执笔经年 2020-12-19 09:10

Hii

I have method in C#, I have to return multiple values from that method with out using collections like arrays. Is there any reliable way ?

相关标签:
7条回答
  • 2020-12-19 09:16

    Why should using 'out' being an unreliable way? (Or did you make a typo and meant without?)

    There are several methods:

    • Return a object which holds multiple values (struct/class etc)
    • out
    • ref
    0 讨论(0)
  • 2020-12-19 09:20

    A Descriptor class, or structure. You must put it somewhere as it's logical that a method must return only one value. Alternatively you can use out or ref, but i would go returning a class.

    Btw what's holding you not to use collections?.

    0 讨论(0)
  • 2020-12-19 09:24

    Yes could create a new type that will contain multiple properties and then return this type:

    public MyType MyMethod() 
    {
        return new MyType
        {
            Prop1 = "foo",
            Prop2 = "bar"
        };
    }
    
    0 讨论(0)
  • 2020-12-19 09:28

    If you are using .NET 4.0 you can use one of the generic Tuple classes to return multiple values from a method call. The static Tuple class provides methods to create Tuple objects. So you do not have to define your own return type for the method.

    public Tuple<string,int> Execute()
    {
      return new Tuple<string,int>("Hello World", 2);
    }
    
    0 讨论(0)
  • 2020-12-19 09:38

    Yes, the out keyword:

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

    then call it like this:

    int i1, i2, i3;
    ReturnManyInts(out i1, out i2, out i3);
    
    Console.WriteLine(i1);
    Console.WriteLine(i2);
    Console.WriteLine(i3);
    

    which outputs:

    10
    20
    30
    

    EDIT:

    I'm seeing that a lot of posts are suggesting to create your own class for this. This is not necessary as .net provides you with a class to do what they are saying already. The Tuple class.

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

    then you can retrieve it like so:

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

    there are generic overloads so you can have up to 8 unique types in your tuple.

    0 讨论(0)
  • 2020-12-19 09:39
    public int Method Name(out string stringValue, out int intValue)
    {
        ///
              Method goes here
        ///
    
        return intVaraible
    }
    

    here you will get 3 return Values 1. stringValue 2. intValue 3. intVariable

    0 讨论(0)
提交回复
热议问题