Первый цикл может быть реализован примерно так:
foreach (Person p in Persons)
{
// do something with p.Name
}
Вы можете реализовать свойство примерно так:
public IEnumerator<string> Names
{
get
{
foreach (Person p in persons)
{
yield return p.Name;
}
}
}
или используя Linq:
public IEnumerator<string> Names
{
get
{
return persons.Select(p => p.Name);
}
}