Причина для этого, я подозреваю, заключается в том, что вам нужно иметь возможность искать все записи для определенной ключевой буквы.В этом случае Lookup
является лучшим соответствием, как правило:
var letterLookup = ParentDict.ToLookup(kv=>kv.Key[0]);
Можно использовать так:
//letterLookup['A'] is an IEnumerable<KeyValuePair<string,string>>...
Console.WriteLine(string.Join(", ",
letterLookup['A'].Select(kv=>kv.ToString()).ToArray()
)); // [A_1, 1], [A_2, 2]
Console.WriteLine(new XElement("root",
letterLookup['B'].Select(kv=>new XElement(kv.Key,kv.Value))
));// <root><B_1>3</B_1><B_2>4</B_2></root>
Console.WriteLine(letterLookup['B'].Any()); //true
Console.WriteLine(letterLookup['Z'].Any()); //false
Преимущество поиска по словарю состоит в том, что он может содержатьмножественные значения для любого заданного ключа (в отличие от словаря), и что у него есть непротиворечивый API, если определенный ключ отсутствует: тогда он возвращает пустое перечисляемое значение, тогда как словарь, содержащий перечисляемые значения, может либо генерировать KeyNotFoundException, либо возвращать ноль, либо возвращатьперечислимое пустое, все зависит от того, как вы его создали.