¿Hay algún beneficio para los diccionarios anidados o basados ​​en Tuple?

He estado buscando una manera de almacenar y recuperar valores en más de la clave única que proporciona la clase de diccionario genérica de C #.

Buscando en la web (y en el mismo SO) me ha mostrado un par de opciones:

Diccionarios Basados ​​en Tuple

.NET 4.0 facilita la compatibilidad con una clase Tuple <,> genérica. Esto significa que puede hacer un Diccionario de cualquier Tupla arbitraria, es decir,

var myDict = new Dictionary<Tuple<Char, Int>, MyClass>();

Diccionarios anidados

Aprendí que también puede anidar los Diccionarios dentro de los Diccionarios, lo que hace que el acceso al resultado almacenado sea similar al acceso a una matriz N-Dimensional. Por ejemplo:

Dictionary<int, Dictionary<int, Dictionary<Char, MyClass>>>

que luego podría ser accedida por:MyClass foo = MyData[8][3]['W'];

Diccionarios clave concatenados delimitados

Pero mientras tantotrabajo bien para datos complejos y clases personalizadas, me pregunto si siempre son necesarias. Para datos primitivos, al menos, parecería que concatenar las claves con un delimitador es igual de efectivo.

//keys are char + int
Dictionary<string, MyClass> myDict = New Dictionary<string, Myclass>();
String input = myChar + "|" + myInt
MyClass foo = myDict[input]

¿Hay algún escenario que haga que uno de estos métodos sea superior al otro? ¿Tendrán tiempos de desempeño similares? ¿O debería centrarse, en cambio, en qué método proporciona el código más limpio y fácil de mantener?

¿Pensamientos?

Respuestas a la pregunta(4)

Su respuesta a la pregunta