Programmerare, skeptiker, sekulärhumanist, antirasist.
Författare till bok om C64 och senbliven lantis.
Röstar pirat.
2016-11-17
Om jag vill skapa en funktion som skickar tillbaka två värden, kan det lösas med en tuple. I .NET Framework är tuples implementerat som en generisk klass. Denna funktion skickar tillbaka en int och en string:
public static Tuple<int, string> DoSomething() { return Tuple.Create(10, "Hello"); }
Ett anrop som tar emot svaren skulle kunna se ut så här. I detta fall är response av typen Tuple<int, string>, vilket innebär att Item1 är en int och Item2 en string.
var response = DoSomething(); Console.WriteLine(response.Item1); //10 Console.WriteLine(response.Item2); //"Hello"
Eftersom C# 7 har inbyggt stöd för tuples, behöver jag inte hänvisa till klassen Tuple. Det går helt enkelt att deklarera fler returer på en funktion.
Samma funktion i C# 7 kan se ut så här (givet att NuGet-paketet System.ValueTuple är på plats):
public static (int, string) DoSomething() { return (10, "Hello"); }
Koden som utför anropet kan se lika dan ut. Variabeln response är nu en (int, string) istället för en Tuple<int, string>.
Funktionens returvärden kan dessutom ha specificerade namn, vilket gör koden mer självdokumenterande.
public static (int i, string s) DoSomething() { return (10, "Hello"); }
Anropet:
var response = DoSomething(); Console.WriteLine(response.i); //10 Console.WriteLine(response.s); //"Hello"
Tuples kan skapas inline (x nedan), inline med namngivna medlemmar (y nedan) eller inline med type inference (z nedan).
(int, int, int) x = (10, 20, 30); Console.WriteLine(x.Item1); //10 (int kalle, int pelle, int sven) y = (10, 20, 30); Console.WriteLine(y.kalle); //10 var z = (10, 20, 30); Console.WriteLine(z.Item1); //10
Categories: C#
Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!
Leave a Reply