Tuples Type Provide way to group multiple Data elements into light weight structure
Tuples are very usefull as method return type, when you need to return multiple value instead of one
Tuples can also implemented as replacement for light classes to reduce code clutter and simplicity
One of my favorite use case is storing Tabular data using List of Tuple with Field Names. for Example storing List of books, with each book having Unique ID, Name, no of pages, Author... etc
Example Tuples without Field names
(int,string,int)Book;Book.Item1=1;Book.Item2="The Way of Kings";Book.Item3=1200;Console.WriteLine($"{Book.Item1}-{Book.Item2}-{Book.Item3}");
Example Tuple with Field Names
(intId,stringName,intPages)Book=(1,"The Way of King",1200);Console.WriteLine($"{Book.Id}-{Book.Name}-{Book.Pages}");
(intId,stringName,intPages)Book;Book.Id=1;Book.Name="The Way of Kings";Book.Pages=1200;Console.WriteLine($"{Book.Id}-{Book.Name}-{Book.Pages}");
varsum=4.5;varcount=3;vart=(sum,count);Console.WriteLine($"Sum of {t.count} elements is {t.sum}.");
vara=1;vart=(a,b:2,3);Console.WriteLine($"The 1st element is {t.Item1} (same as {t.a}).");Console.WriteLine($"The 2nd element is {t.Item2} (same as {t.b}).");Console.WriteLine($"The 3rd element is {t.Item3}.");// Output:// The 1st element is 1 (same as 1).// The 2nd element is 2 (same as 2).// The 3rd element is 3.
Example: Method with Tuple Return
varxs=new[]{4,7,9};varlimits=FindMinMax(xs);Console.WriteLine($"Limits of [{string.Join("", xs)}] are {limits.min} and {limits.max}");// Output:// Limits of [4 7 9] are 4 and 9varys=new[]{-9,0,67,100};var(minimum,maximum)=FindMinMax(ys);Console.WriteLine($"Limits of [{string.Join("", ys)}] are {minimum} and {maximum}");// Output:// Limits of [-9 0 67 100] are -9 and 100(intmin,intmax)FindMinMax(int[]input){if(inputisnull||input.Length==0){thrownewArgumentException("Cannot find minimum and maximum of a null or empty array.");}varmin=int.MaxValue;varmax=int.MinValue;foreach(variininput){if(i<min){min=i;}if(i>max){max=i;}}return(min,max);}
Work with List of Tuples
(intId,stringName,intPages)Book1=(1,"The Way of King",1200);(intId,stringName,intPages)Book2=(2,"Words of Radiance",1100);varbooks=newList<(intId,stringName,intPages)>();books.Add(Book1);books.Add(Book2);books.Add((3,"Oathbringer",1000));//Loop through list of tuplefor(inti=0;i<books.Count;i++){Console.WriteLine($"{books[i].Id}-{books[i].Name}-{books[i].Pages}");}//Loop using for eachforeach(varbookinbooks){Console.WriteLine($"{book.Id}-{book.Name}-{book.Pages}");}