Вы можете просто использовать это:
Dictionary<int, Dictionary<string, string>>
Используйте это так:
var dd = new Dictionary<int, Dictionary<string, string>>();
dd[5] = new Dictionary<string, string>();
dd[5]["a"] = "foo";
Вы также можете создать новый класс, чтобы упростить создание внутреннего словаря:
class DDict { // optional: generic
private readonly Dictionary<int, Dictionary<string, string>> _Inner = new ...;
public Dictionary<string, string> this (int index) {
Dictionary<string, string> d;
if (!_Inner.TryGetValue(index, out d)) {
d = new Dictionary<string, string>();
_Inner.Add(index, d);
}
return d;
}
}
var dd = new DDict();
dd[5]["a"] = "hi";
Если первый индекс является последовательным, вы, конечно же, можете просто использовать массив словарей:
var dd = new Dictionary<string, string>[128];
Кроме того, если внутренние члены всегда одинаковы, я предлагаю создать новый класс и получить к нему доступ в массиве:
class Dat {
string name;
string phone;
}
var list = new Dat[128]
// access:
list[5].name = "matt";
Вместо массива вы также можете использовать List
или Dictionary<int, Dat>
в этом случае.