¿Es posible devolver múltiples valores de un método de forma nativa?
¿A qué te refieres con nativo ?
C# 7 tiene una nueva función que le permite devolver más de un valor de un método gracias a los tipos de tupla y los literales de tupla.
Tome la siguiente función, por ejemplo:
(string, string, string) MyCoolFunction() // tuple return type { //... return (firstValue, secondValue, thirdValue); }
Que se puede usar así:
var values = MyCoolFunction(); var firstValue = values.Item1; var secondValue = values.Item2; var thirdValue = values.Item3;
O usando la sintaxis de deconstrucción
(string first, string second, string third) = MyCoolFunction(); //... var (first, second, third) = MyCoolFunction(); //Implicitly Typed Variables
Tómese un tiempo para consultar la Documentación , tienen algunos muy buenos ejemplos (¡esta respuesta se basa en ellos!).
Estás buscando Tuplas. Esto es un ejemplo:
static (int count, double sum) Tally(IEnumerable<double> values) { int count = 0; double sum = 0.0; foreach (var value in values) { count++; sum += value; } return (count, sum); } ... var values = ... var t = Tally(values); Console.WriteLine($"There are {t.count} values and their sum is {t.sum}");
Ejemplo robado de http://www.thomaslevesque.com/2016/07/25/tuples-in-c-7/
También puedes implementar así:
public class Program { public static void Main(string[] args) { var values=GetNumbers(6,2); Console.Write(values); } static KeyValuePair<int,int> GetNumbers(int x,int y) { return new KeyValuePair<int,int>(x,y); } }