C#一个值的多个键

时间:2015-10-05 17:10:32

标签: c# dictionary collections key

我正在寻找一个可以将多个键映射到单个对象的C#容器。例如:一个人可以用他的英文名字或他的西班牙名字来引用。我想这样做,以便我不必创建多个字典副本,当我从结构中添加/删除时,我只需要添加/删除一次。这样的结构是否存在?

1 个答案:

答案 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);

修改 我明白了:只有一个添加和删除?嗯。不知道存在这样的结构。也许你可以添加一个扩展方法来处理这种情况。

我改变了代码...