Tuples in C#
One of my favorite features in .NET 4 is the addition of the Tuple. Tuples allow you to easily capture related values without having to go through the trouble of creating a new class. It's a much more flexible concept than the KeyValuePair class because they can hold up to 8 values.
Tuple is a borrowed concept from F# that's been wedged into C# using the power of generics (and the copying and pasting of a class about 8 times).
Here's an example of the usage
1: public void Tuple()
2: {
3: var tup = new System.Tuple<int, string, DateTime>(1, "Brian", DateTime.Now);
4: Debug.Write(tup.Item1 + tup.Item2 + tup.Item3);
5: }
1: namespace System
2: {
3: [Serializable]
4: public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
5: {
6: public Tuple(T1 item1, T2 item2, T3 item3);
7:
8: public T1 Item1 { get; }
9:
10: public T2 Item2 { get; }
11:
12: public T3 Item3 { get; }
13:
14: public override bool Equals(object obj);
15:
16: public override int GetHashCode();
17:
18: public override string ToString();
19: }
20: }
Interesting to note that, yes there are 8 different versions of the class to support Tuples that hold up to 8 values.
For more details check - http://msdn.microsoft.com/en-us/library/system.tuple.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1