我正在寻找一个可以将多个键映射到单个对象的C#容器。例如:一个人可以用他的英文名字或他的西班牙名字来引用。我想这样做,以便我不必创建多个字典副本,当我从结构中添加/删除时,我只需要添加/删除一次。这样的结构是否存在?
答案 0 :(得分:2)
是的,它存在:Dictionary<TKey, TValue>
没有理由不添加具有多个键的单个对象实例:
public class Person
{
public string EnglishName { get; set; }
public string SpanishName { get; set; }
}
public static class PersonDictExtensions
{
public static void AddPerson(this IDictionary<string, Person> persons, Person person)
{
persons.Add(person.EnglishName, person);
persons.Add(person.SpanishName, person);
}
public static void RemovePerson(this IDictionary<string, Person> persons, Person person)
{
foreach (var item in persons.Where(x => object.ReferenceEquals(x.Value, person)).ToList())
{
persons.Remove(item.Key);
}
}
}
var person = new Person { EnglishName = "Foo", SpanishName = "Bar" };
var dict = new Dictionary<string, Person>();
dict.AddPerson(person);
dict.RemovePerson(person);
修改强> 我明白了:只有一个添加和删除?嗯。不知道存在这样的结构。也许你可以添加一个扩展方法来处理这种情况。
我改变了代码...