C# Method Return Multiple Values

There are various ways return multiple values from method in .net .
First way Tuple, our new class comes with .net 4.0.

  1. using System;
  2.  
  3. namespace Test
  4. {
  5.     class Program
  6.     {
  7.         public static Tuple<int, string> ReturnTuple()
  8.         {
  9.             int i = 0;
  10.             string str = string.Empty;
  11.  
  12.             //Do something
  13.  
  14.             //There is two way to create a tuple object
  15.             return Tuple.Create(i, str);
  16.             //return new Tuple<int, string>(i, str);                
  17.         }
  18.  
  19.         static void Main(string[] args)
  20.         {
  21.             int myInt;
  22.             string myString;
  23.  
  24.             Tuple<int, string> myTuple = ReturnTuple();
  25.  
  26.             myInt = myTuple.Item1;
  27.             myString = myTuple.Item2;
  28.  
  29.             Console.WriteLine("{0:d}-{1}", myInt, myString);
  30.         }        
  31.     }
  32. }

Second way use ref, out keywords.
  1. using System;
  2.  
  3. namespace Test
  4. {
  5.     class Program
  6.     {
  7.         public static int UseOut(out string str)
  8.         {
  9.             int i = 0;
  10.             str = string.Empty;
  11.  
  12.             //Do something
  13.  
  14.             return i;        
  15.         }
  16.  
  17.         static void Main(string[] args)
  18.         {
  19.             int myInt;
  20.             string myString;
  21.  
  22.             myInt = UseOut(out myString);
  23.  
  24.             Console.WriteLine("{0:d} - {1}", myInt, myString);
  25.         }        
  26.     }
  27. }

You can create your custom classes or structs and return them. These classes will include return variables.
  1. using System;
  2.  
  3. namespace Test
  4. {
  5.     class Program
  6.     {
  7.         public static ReturnValues ReturnCustomStruct()
  8.         {
  9.             ReturnValues rv;
  10.             int i = 0;
  11.             string str = string.Empty;
  12.  
  13.             //Do something
  14.  
  15.             rv.ValueInt = i;
  16.             rv.ValueString = str;
  17.             return rv;        
  18.         }
  19.  
  20.         static void Main(string[] args)
  21.         {
  22.             int myInt;
  23.             string myString;
  24.  
  25.             ReturnValues rv = ReturnCustomStruct();
  26.  
  27.             myInt = rv.ValueInt;
  28.             myString = rv.ValueString;
  29.             Console.WriteLine("{0:d} - {1}", myInt, myString);
  30.         }        
  31.     }
  32.  
  33.     struct ReturnValues
  34.     {
  35.         public int ValueInt;
  36.         public string ValueString;
  37.     }
  38. }

4th way. Use List or Array
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Test
  5. {
  6.     class Program
  7.     {
  8.         public static List<object> ReturnList()
  9.         {
  10.             int i = 0;
  11.             string str = string.Empty;
  12.  
  13.             //Do something
  14.  
  15.             return new List<object> {i,str};        
  16.         }
  17.  
  18.         static void Main(string[] args)
  19.         {
  20.             int myInt;
  21.             string myString;
  22.  
  23.             List<object> list = ReturnList();
  24.  
  25.             myInt = Convert.ToInt32(list[0]);
  26.             myString = list[1].ToString();
  27.             Console.WriteLine("{0:d} - {1}", myInt, myString);
  28.         }        
  29.     }
  30. }

Join return variables string or serialization values with a separator.
  1. using System;
  2.  
  3. namespace Test
  4. {
  5.     class Program
  6.     {
  7.         public static string JoinReturnValues()
  8.         {
  9.             int i = 0;
  10.             string str = string.Empty;
  11.  
  12.             //Do something
  13.  
  14.             //separator |
  15.             string returnValue = string.Join("|", i, str);
  16.             return returnValue;
  17.         }
  18.  
  19.         static void Main(string[] args)
  20.         {
  21.             int myInt;
  22.             string myString;
  23.  
  24.             string s = JoinReturnValues();
  25.  
  26.             string[] sArray = s.Split(new char[] { '|' }, 2);
  27.             myInt = Convert.ToInt32(sArray[0]);
  28.             myString = sArray[1].ToString();
  29.             Console.WriteLine("{0:d} - {1}", myInt, myString);
  30.         }        
  31.     }
  32. }

If you are going to return two values you can use KeyValuePair class. There are some other ways too. We can use GLOBAL variables or XML.
m ant / Mechanical Ant