Search code examples
c#.netdata-structuresstd-pairbase-class-library

What is a C# analog of C++ std::pair?


What is a C#'s analog of std::pair in C++? I found System.Web.UI.Pair class, but I'd prefer something template-based.


Solution

  • Tuples are available since .NET4.0 and support generics:

    Tuple<string, int> t = new Tuple<string, int>("Hello", 4);
    

    In previous versions you can use System.Collections.Generic.KeyValuePair<K, V> or a solution like the following:

    public class Pair<T, U> {
        public Pair() {
        }
    
        public Pair(T first, U second) {
            this.First = first;
            this.Second = second;
        }
    
        public T First { get; set; }
        public U Second { get; set; }
    };
    

    And use it like this:

    Pair<String, int> pair = new Pair<String, int>("test", 2);
    Console.WriteLine(pair.First);
    Console.WriteLine(pair.Second);
    

    This outputs:

    test
    2
    

    Or even this chained pairs:

    Pair<Pair<String, int>, bool> pair = new Pair<Pair<String, int>, bool>();
    pair.First = new Pair<String, int>();
    pair.First.First = "test";
    pair.First.Second = 12;
    pair.Second = true;
    
    Console.WriteLine(pair.First.First);
    Console.WriteLine(pair.First.Second);
    Console.WriteLine(pair.Second);
    

    That outputs:

    test
    12
    true