Например, у меня есть класс person, у него есть свойства имени и знакомства, name - строка, в то время как знакомства - массив лиц. Я хотел бы написать метод, который получает имя в качестве параметра и находит его в списке знакомых человека и в списке знакомств и так далее, до тех пор, пока знакомство не станет нулевым или имя не будет найдено.
Ниже приведен код. Также может быть круговая петля, как этого избежать.
Заранее благодарим за интерес к вопросу.
class P
{
public string Name;
public P[] Acquaintances;
public P(string name, P[] acquaintances)
{
if (String.IsNullOrWhiteSpace(name))
{
throw new ArgumentException("Name cannot be null or white space.",
"name");
}
this.Name = name;
this.Acquaintances = acquaintances;
}
public bool FindAcquaintance(string name)
{
if (String.IsNullOrWhiteSpace(name))
{
throw new ArgumentException("Name cannot be null or white space.",
"name");
}
if (Name.Equals(name))
{
return true;
}
if (Acquaintances == null || Acquaintances.Length == 0)
{
return false;
}
foreach (P acquaintance in this.Acquaintances)
{
if (acquaintance.Name.Equals(name))
{
return true;
}
if (acquaintance.FindAcquaintance(name))
{
return true;
}
}
return false;
}
}
Использование
P person = new P("Alex",
new P[] {
new P("Bob", new P[] { new P("James", new P[] { }) }),
new P("Kavin", new P[] { new P("Brent", null) })
});
bool found = person.FindAcquaintance("Brent");