O UserVoice do Visual Studio fornece um link para a implementação genérica do OrderedDictionary por dotmore.
Mas se você precisar obter apenas pares de chave / valor por índice e não precisar obter valores por chave, use um truque simples. Declare alguma classe genérica (eu a chamei de ListArray) da seguinte maneira:
class ListArray<T> : List<T[]> { }
Você também pode declarar isso com construtores:
class ListArray<T> : List<T[]>
{
public ListArray() : base() { }
public ListArray(int capacity) : base(capacity) { }
}
Por exemplo, você lê alguns pares de chave / valor de um arquivo e deseja armazená-los na ordem em que foram lidos, para obtê-los posteriormente pelo índice:
ListArray<string> settingsRead = new ListArray<string>();
using (var sr = new StreamReader(myFile))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string[] keyValueStrings = line.Split(separator);
for (int i = 0; i < keyValueStrings.Length; i++)
keyValueStrings[i] = keyValueStrings[i].Trim();
settingsRead.Add(keyValueStrings);
}
}
// Later you get your key/value strings simply by index
string[] myKeyValueStrings = settingsRead[index];
Como você deve ter notado, você pode não ter necessariamente apenas pares de chave / valor no seu ListArray. As matrizes de itens podem ter qualquer comprimento, como na matriz irregular.