// ----------------------------------------------------------------------------
// Tuple structs for use in .NET Not-Quite-3.5 (e.g. Unity3D).
//
// Used Chapter 3 in http://functional-programming.net/ as a starting point.
//
// Note: .NET 4.0 Tuples are immutable classes so they're *slightly* different.
// ----------------------------------------------------------------------------
using System;
///
/// Utility class that simplifies cration of tuples by using
/// method calls instead of constructor calls
///
public static class Tuple {
///
/// Creates a new tuple value with the specified elements. The method
/// can be used without specifying the generic parameters, because C#
/// compiler can usually infer the actual types.
///
/// First element of the tuple
/// Second element of the tuple
/// A newly created tuple
public static Tuple Create(T1 item1, T2 second){
return new Tuple(item1, second);
}
///
/// Creates a new tuple value with the specified elements. The method
/// can be used without specifying the generic parameters, because C#
/// compiler can usually infer the actual types.
///
/// First element of the tuple
/// Second element of the tuple
/// Third element of the tuple
/// A newly created tuple
public static Tuple Create(T1 item1, T2 second, T3 third){
return new Tuple(item1, second, third);
}
///
/// Creates a new tuple value with the specified elements. The method
/// can be used without specifying the generic parameters, because C#
/// compiler can usually infer the actual types.
///
/// First element of the tuple
/// Second element of the tuple
/// Third element of the tuple
/// Fourth element of the tuple
/// A newly created tuple
public static Tuple Create(T1 item1, T2 second, T3 third, T4 fourth){
return new Tuple(item1, second, third, fourth);
}
///
/// Extension method that provides a concise utility for unpacking
/// tuple components into specific out parameters.
///
/// the tuple to unpack from
/// the out parameter that will be assigned tuple.Item1
/// the out parameter that will be assigned tuple.Item2
public static void Unpack(this Tuple tuple, out T1 ref1, out T2 ref2){
ref1 = tuple.Item1;
ref2 = tuple.Item2;
}
///
/// Extension method that provides a concise utility for unpacking
/// tuple components into specific out parameters.
///
/// the tuple to unpack from
/// the out parameter that will be assigned tuple.Item1
/// the out parameter that will be assigned tuple.Item2
/// the out parameter that will be assigned tuple.Item3
public static void Unpack(this Tuple tuple, out T1 ref1, out T2 ref2, T3 ref3){
ref1 = tuple.Item1;
ref2 = tuple.Item2;
ref3 = tuple.Item3;
}
///
/// Extension method that provides a concise utility for unpacking
/// tuple components into specific out parameters.
///
/// the tuple to unpack from
/// the out parameter that will be assigned tuple.Item1
/// the out parameter that will be assigned tuple.Item2
/// the out parameter that will be assigned tuple.Item3
/// the out parameter that will be assigned tuple.Item4
public static void Unpack(this Tuple tuple, out T1 ref1, out T2 ref2, T3 ref3, T4 ref4){
ref1 = tuple.Item1;
ref2 = tuple.Item2;
ref3 = tuple.Item3;
ref4 = tuple.Item4;
}
}