public bool AddPerson(string email, string name, int age, string town)
    {
        if (peopleByEmail.ContainsKey(email))
        {
            return(false);
        }

        Person person = new Person(email, name, age, town);

        peopleByEmail.Add(email, person);

        string emailDomain = this.ExtractEmailDomain(email);

        peopleByEmailDomain.AppendValueToKey(emailDomain, person);

        peopleByNameAndTown.AppendValueToKey(new Tuple <string, string>(name, town), person);

        peopleByAge.AppendValueToKey(age, person);

        this.peopleByTownAndAge.EnsureKeyExists(town);
        this.peopleByTownAndAge[town].AppendValueToKey(age, person);

        return(true);
    }