Search code examples
c#generics

Recursive generic types


Is it possible to define a generic type in C# that references itself?

E.g. I want to define a Dictionary<> that holds its type as TValue (for a hierarchy).

Dictionary<string, Dictionary<string, Dictionary<string, [...]>>>

Solution

  • Try:

    class StringToDictionary : Dictionary<string, StringToDictionary> { }
    

    Then you can write:

    var stuff = new StringToDictionary
            {
                { "Fruit", new StringToDictionary
                    {
                        { "Apple", null },
                        { "Banana", null },
                        { "Lemon", new StringToDictionary { { "Sharp", null } } }
                    }
                },
            };
    

    General principle for recursion: find some way to give a name to the recursive pattern, so it can refer to itself by name.