再帰関数に渡す必要があるデータがいくつかあります。その関数内で変更されていないことを確認したい。これどうやってするの?
検討:
static List<Person> GetPeopleWithSameNameAncestors(List<Person> people)
{
return people.Where(person => HasAncestorWithName(person.Parents, person.Name)).ToList();
}
//Here, nameToLookFor is always the same for every outside call to this function
static bool HasAncestorWithName(List<Person> lookIn, String nameToLookFor)
{
return lookIn.Any(p => p.Name == nameToLookFor || (p.Parents != null && HasAncestorWithName(p.Parents, nameToLookFor)));
}
実際の状況はもっと複雑です。そのため、nameToLookFor が変更されていないことを確認することが重要です。誰かが簡単に変更できるからです。ああ、「Person」クラスには触れられません。
これが直接不可能な場合、この問題を安全に解決できるパターンを知っている人はいますか?