6

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 ?

2
  • Can you please expand on "multiple values"? Is it a constant number of your return values? Are they linked logically? What to they represent? Are they in the same type? Commented May 27, 2010 at 6:30
  • Possible duplicate of How can I return multiple values from a function in C#? Commented Jun 3, 2016 at 23:18

7 Answers 7

15

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Also, the Tuple.Create method can infer the types: return Tuple.Create(1, "some string", 'B');
Note that Tuple is a new feature of .NET 4.0, which Jibu may not (yet) have.
10

Well, you could use:

  • a custom class/struct/type, containing all your values
  • out parameters

I.e.:

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

public MyValues ReturnMyValues();

or

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

Comments

5

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

Comments

2

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

Comments

2

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

Comments

0

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?.

Comments

0
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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.