F-ES Sitecore
Некоторые из ваших кодов не имеют большого смысла, но для этого кода я обновил ваше имя набора
public void setName(string name)
{
Console.WriteLine("Please Enter the name of the Person");
this.name = name;
}
Нет никакого смысла передавать "имя", чтобы оно просто было переопределено консольным вводом.
Ваш словарь не находит ваш объект, потому что он ищет реальный объект, который вы ему даете
Dictionary<int, Person> dictionary = new Dictionary<int, Person>();
Person personJohn = new Person();
personJohn.setName("John");
dictionary.Add(1, personJohn);
Person personDave = new Person();
personDave.setName("Dave");
dictionary.Add(2, personDave);
Person nam = new Person();
bool success = nam.SearchPerson(dictionary, personJohn);
// success is true because we are looking for an object (personJohn) that is in the dictionary
Person tempPerson = new Person();
tempPerson.name = "John";
success = nam.SearchPerson(dictionary, tempPerson);
// success is false because "tempPerson" isn't in the dictionary
// even though it has the same "name" as an object in the dictionary
// the code doesn't know that constitutes a match
Однако вы не хотите, чтобы ваш код работал на уровне объекта, вас интересует только сопоставление значений свойств, а не сопоставление объектов. Вы можете обновить свою функцию поиска следующим образом
public bool SearchPerson(Dictionary<int, Person> dict, Person pr)
{
if (dict.Values.Any(p => p.name == pr.name))
{
Console.WriteLine("Successfully found");
return true;
}
return false;
}
Другим решением является создание пользовательского компаратора, который сообщает коду, что два объекта эквивалентны, если свойства имени одинаковы.
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
if (x == null || x.name == null || y == null || y.name == null)
{
return false;
}
return x.name.Equals(y.name);
}
public int GetHashCode(Person obj)
{
return obj.name.GetHashCode();
}
}
Теперь ваша функция поиска будет выглядеть следующим образом
public bool SearchPerson(Dictionary<int, Person> dict, Person pr)
{
if (dict.Values.Contains(pr, new PersonComparer()))
{
Console.WriteLine("Successfully found");
return true;
}
return false;
}